| /******************************************************************************* |
| * 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.Collection; |
| import java.util.LinkedList; |
| import java.util.List; |
| import org.eclipse.osee.ats.api.IAtsServices; |
| import org.eclipse.osee.ats.api.IAtsWorkItem; |
| import org.eclipse.osee.ats.api.ai.IAtsActionableItemService; |
| 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.version.IAtsVersion; |
| import org.eclipse.osee.ats.api.workdef.IAtsStateDefinition; |
| import org.eclipse.osee.ats.api.workdef.IStateToken; |
| import org.eclipse.osee.ats.api.workdef.WidgetResult; |
| import org.eclipse.osee.ats.api.workflow.ActionResult; |
| import org.eclipse.osee.ats.api.workflow.IAtsAction; |
| import org.eclipse.osee.ats.api.workflow.IAtsTeamWorkflow; |
| import org.eclipse.osee.ats.api.workflow.IAtsWorkItemService; |
| import org.eclipse.osee.ats.api.workflow.ITeamWorkflowProvidersLazy; |
| import org.eclipse.osee.ats.api.workflow.note.IAtsWorkItemNotes; |
| import org.eclipse.osee.ats.api.workflow.transition.ITransitionListener; |
| import org.eclipse.osee.ats.core.ai.ActionableItemManager; |
| import org.eclipse.osee.ats.core.util.AtsObjects; |
| import org.eclipse.osee.ats.core.validator.AtsXWidgetValidateManager; |
| import org.eclipse.osee.ats.core.workflow.note.ArtifactNote; |
| import org.eclipse.osee.ats.core.workflow.note.AtsWorkItemNotes; |
| import org.eclipse.osee.framework.core.data.ArtifactId; |
| 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.Collections; |
| import org.eclipse.osee.framework.jdk.core.util.Conditions; |
| import org.eclipse.osee.framework.jdk.core.util.Strings; |
| |
| /** |
| * @author Donald G. Dunne |
| */ |
| public class AtsWorkItemServiceImpl implements IAtsWorkItemService { |
| |
| private final ITeamWorkflowProvidersLazy teamWorkflowProvidersLazy; |
| private final IAtsServices services; |
| private IAtsActionableItemService actionableItemService; |
| |
| public AtsWorkItemServiceImpl(IAtsServices services, ITeamWorkflowProvidersLazy teamWorkflowProvidersLazy) { |
| this.services = services; |
| this.teamWorkflowProvidersLazy = teamWorkflowProvidersLazy; |
| } |
| |
| @Override |
| public IStateToken getCurrentState(IAtsWorkItem workItem) throws OseeCoreException { |
| ArtifactId artifact = services.getArtifactResolver().get(workItem); |
| Conditions.checkNotNull(artifact, "workItem", "Can't Find Artifact matching [%s]", workItem.toString()); |
| return workItem.getStateDefinition(); |
| } |
| |
| @Override |
| public Collection<IAtsAbstractReview> getReviews(IAtsTeamWorkflow teamWf) throws OseeCoreException { |
| ArtifactId artifact = services.getArtifactResolver().get(teamWf); |
| Conditions.checkNotNull(artifact, "teamWf", "Can't Find Artifact matching [%s]", teamWf.toString()); |
| return services.getRelationResolver().getRelated(teamWf, AtsRelationTypes.TeamWorkflowToReview_Review, |
| IAtsAbstractReview.class); |
| } |
| |
| @Override |
| public Collection<IAtsAbstractReview> getReviews(IAtsTeamWorkflow teamWf, IStateToken state) throws OseeCoreException { |
| ArtifactId artifact = services.getArtifactResolver().get(teamWf); |
| Conditions.checkNotNull(artifact, "teamWf", "Can't Find Artifact matching [%s]", teamWf.toString()); |
| List<IAtsAbstractReview> reviews = new LinkedList<>(); |
| for (IAtsAbstractReview review : services.getRelationResolver().getRelated(teamWf, |
| AtsRelationTypes.TeamWorkflowToReview_Review, IAtsAbstractReview.class)) { |
| if (services.getAttributeResolver().getSoleAttributeValue(review, AtsAttributeTypes.RelatedToState, "").equals( |
| state.getName())) { |
| reviews.add(review); |
| } |
| } |
| return reviews; |
| } |
| |
| @Override |
| public IAtsTeamWorkflow getFirstTeam(Object object) throws OseeCoreException { |
| Collection<IAtsTeamWorkflow> related = getTeams(object); |
| return related.isEmpty() ? null : related.iterator().next(); |
| } |
| |
| @Override |
| public Collection<IAtsTeamWorkflow> getTeams(Object object) { |
| List<IAtsTeamWorkflow> teams = new LinkedList<>(); |
| if (object instanceof IAtsAction) { |
| for (ArtifactId teamWfArt : services.getRelationResolver().getRelated((IAtsAction) object, |
| AtsRelationTypes.ActionToWorkflow_WorkFlow)) { |
| teams.add(services.getWorkItemFactory().getTeamWf(teamWfArt)); |
| } |
| } else if (object instanceof ActionResult) { |
| return Collections.castAll(AtsObjects.getArtifacts(((ActionResult) object).getTeamWfArts())); |
| } |
| return teams; |
| } |
| |
| @Override |
| public void clearImplementersCache(IAtsWorkItem workItem) { |
| services.clearImplementersCache(workItem); |
| } |
| |
| @Override |
| public Collection<WidgetResult> validateWidgetTransition(IAtsWorkItem workItem, IAtsStateDefinition toStateDef) throws OseeStateException { |
| return AtsXWidgetValidateManager.validateTransition(workItem, toStateDef, services); |
| } |
| |
| @Override |
| public Collection<ITransitionListener> getTransitionListeners() { |
| return services.getTransitionListeners(); |
| } |
| |
| @Override |
| public String getTargetedVersionStr(IAtsTeamWorkflow teamWf) throws OseeCoreException { |
| IAtsVersion targetedVersion = services.getVersionService().getTargetedVersionByTeamWf(teamWf); |
| if (targetedVersion != null) { |
| return targetedVersion.getName(); |
| } |
| return ""; |
| } |
| |
| @Override |
| public String getArtifactTypeShortName(IAtsTeamWorkflow teamWf) { |
| for (ITeamWorkflowProvider atsTeamWorkflow : teamWorkflowProvidersLazy.getProviders()) { |
| String typeName = atsTeamWorkflow.getArtifactTypeShortName(teamWf); |
| if (Strings.isValid(typeName)) { |
| return typeName; |
| } |
| } |
| return null; |
| } |
| |
| @Override |
| public IAtsActionableItemService getActionableItemService() { |
| if (actionableItemService == null) { |
| actionableItemService = |
| new ActionableItemManager(services.getAttributeResolver(), services.getStoreService(), services); |
| } |
| return actionableItemService; |
| } |
| |
| @Override |
| public String getCombinedPcrId(IAtsWorkItem workItem) throws OseeCoreException { |
| String id = ""; |
| for (ITeamWorkflowProvider provider : TeamWorkflowProviders.getTeamWorkflowProviders()) { |
| if (provider.isResponsibleFor(workItem)) { |
| String computedPcrId = provider.getComputedPcrId(workItem); |
| if (Strings.isValid(computedPcrId)) { |
| id = computedPcrId; |
| } |
| } |
| } |
| if (Strings.isInValid(id)) { |
| String legacyPcrId = |
| services.getAttributeResolver().getSoleAttributeValue(workItem, AtsAttributeTypes.LegacyPcrId, ""); |
| if (Strings.isValid(legacyPcrId)) { |
| return String.format("%s - %s", workItem.getAtsId(), legacyPcrId); |
| } else { |
| id = workItem.getAtsId(); |
| } |
| } |
| return id; |
| } |
| |
| @Override |
| public IAtsWorkItemNotes getNotes(IAtsWorkItem workItem) { |
| return new AtsWorkItemNotes(new ArtifactNote(workItem, services), services); |
| } |
| |
| } |