blob: 349cf25afae216cc786edc9e57b2dc1561fa9309 [file] [log] [blame]
/*******************************************************************************
* 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.impl.internal.workitem;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import org.eclipse.osee.ats.api.IAtsObject;
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.IAtsWorkItemFactory;
import org.eclipse.osee.ats.api.workdef.IAtsStateDefinition;
import org.eclipse.osee.ats.api.workdef.IStateToken;
import org.eclipse.osee.ats.api.workdef.StateType;
import org.eclipse.osee.ats.api.workdef.WidgetResult;
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.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.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.orcs.data.ArtifactReadable;
/**
* @author Donald G. Dunne
*/
public class AtsWorkItemServiceImpl implements IAtsWorkItemService {
private final IAtsWorkItemFactory workItemFactory;
private final IArtifactProvider artifactProvider;
private final IAtsServer atsServer;
public AtsWorkItemServiceImpl(IAtsServer atsServer, IAtsWorkItemFactory workItemFactory, IArtifactProvider artifactProvider) {
this.atsServer = atsServer;
this.workItemFactory = workItemFactory;
this.artifactProvider = artifactProvider;
}
@Override
public IArtifactType getArtifactType(IAtsWorkItem workItem) throws OseeCoreException {
return artifactProvider.getArtifact(workItem).getArtifactType();
}
@Override
public Collection<Object> getAttributeValues(IAtsObject atsObject, IAttributeType attributeType) throws OseeCoreException {
return atsServer.getArtifact(atsObject).getAttributeValues(attributeType);
}
@Override
public boolean isOfType(IAtsWorkItem workItem, IArtifactType matchType) throws OseeCoreException {
return artifactProvider.getArtifact(workItem).getArtifactType().matches(matchType);
}
@Override
public IAtsTeamWorkflow getParentTeamWorkflow(IAtsWorkItem workItem) throws OseeCoreException {
return workItem.getParentTeamWorkflow();
}
@Override
public int getTransactionNumber(IAtsWorkItem workItem) throws OseeCoreException {
return artifactProvider.getArtifact(workItem).getTransaction();
}
@Override
public Collection<IAtsTeamWorkflow> getTeams(IAtsAction action) throws OseeCoreException {
List<IAtsTeamWorkflow> teams = new ArrayList<IAtsTeamWorkflow>();
for (ArtifactReadable art : atsServer.getArtifact(action).getRelated(AtsRelationTypes.ActionToWorkflow_WorkFlow)) {
teams.add(atsServer.getWorkItemFactory().getTeamWf(art));
}
return teams;
}
@Override
public IStateToken getCurrentState(IAtsWorkItem workItem) throws OseeCoreException {
return new SimpleTeamState(
getCurrentStateName(workItem),
StateType.valueOf(atsServer.getArtifact(workItem).getSoleAttributeValue(AtsAttributeTypes.CurrentStateType, "")));
}
@Override
public Collection<IAtsTask> getTasks(IAtsTeamWorkflow teamWf, IStateToken state) throws OseeCoreException {
final List<IAtsTask> tasks = new ArrayList<IAtsTask>();
for (ArtifactReadable art : atsServer.getArtifact(teamWf).getRelated(AtsRelationTypes.TeamWfToTask_Task)) {
String relatedState = art.getSoleAttributeValue(AtsAttributeTypes.RelatedToState, "");
if (state.getName().equals(relatedState)) {
tasks.add(atsServer.getWorkItemFactory().getTask(art));
}
}
return tasks;
}
@Override
public Collection<? extends IAtsTask> getTasks(IAtsWorkItem workItem, IStateToken state) {
if (workItem instanceof IAtsTeamWorkflow) {
return getTasks((IAtsTeamWorkflow) workItem, state);
}
return Collections.emptyList();
}
@Override
public Collection<IAtsAbstractReview> getReviews(IAtsTeamWorkflow teamWf) throws OseeCoreException {
final List<IAtsAbstractReview> reviews = new ArrayList<IAtsAbstractReview>();
for (ArtifactReadable art : atsServer.getArtifact(teamWf).getRelated(AtsRelationTypes.TeamWorkflowToReview_Review)) {
reviews.add(atsServer.getWorkItemFactory().getReview(art));
}
return reviews;
}
@Override
public Collection<IAtsAbstractReview> getReviews(IAtsTeamWorkflow teamWf, IStateToken state) throws OseeCoreException {
final List<IAtsAbstractReview> reviews = new ArrayList<IAtsAbstractReview>();
for (ArtifactReadable art : atsServer.getArtifact(teamWf).getRelated(AtsRelationTypes.TeamWorkflowToReview_Review)) {
String relatedState = art.getSoleAttributeValue(AtsAttributeTypes.RelatedToState, "");
if (state.getName().equals(relatedState)) {
reviews.add(atsServer.getWorkItemFactory().getReview(art));
}
}
return reviews;
}
@Override
public Collection<IAtsTask> getTasks(IAtsTeamWorkflow teamWf) throws OseeCoreException {
final List<IAtsTask> tasks = new ArrayList<IAtsTask>();
for (ArtifactReadable art : atsServer.getArtifact(teamWf).getRelated(AtsRelationTypes.TeamWfToTask_Task)) {
tasks.add(atsServer.getWorkItemFactory().getTask(art));
}
return tasks;
}
@Override
public IAtsTeamWorkflow getFirstTeam(IAtsAction action) throws OseeCoreException {
IAtsTeamWorkflow team = null;
Collection<IAtsTeamWorkflow> teams = getTeams(action);
if (!teams.isEmpty()) {
team = teams.iterator().next();
}
return team;
}
@Override
public String getCurrentStateName(IAtsWorkItem workItem) throws OseeCoreException {
return artifactProvider.getArtifact(workItem).getSoleAttributeValue(AtsAttributeTypes.CurrentState, "").replaceAll(
";.*$", "");
}
@Override
public void clearImplementersCache(IAtsWorkItem workItem) {
// do nothing; no cache on server
}
@Override
public Collection<WidgetResult> validateWidgetTransition(IAtsWorkItem workItem, IAtsStateDefinition toStateDef) {
return Collections.emptyList();
}
@Override
public Collection<IAtsTask> getTaskArtifacts(IAtsWorkItem workItem) throws OseeCoreException {
if (workItem.isTeamWorkflow()) {
return getTasks((IAtsTeamWorkflow) workItem);
}
return java.util.Collections.emptyList();
}
@Override
public Collection<ITransitionListener> getTransitionListeners() {
return Collections.emptyList();
}
@Override
public String getTargetedVersionStr(IAtsTeamWorkflow teamWf) {
String version = "";
try {
ArtifactReadable art =
artifactProvider.getArtifact(teamWf).getRelated(AtsRelationTypes.TeamWorkflowTargetedForVersion_Version).getOneOrNull();
if (art != null) {
version = art.getName();
}
} catch (OseeCoreException ex) {
version = "exception: " + ex;
}
return version;
}
@Override
public String getTeamName(IAtsTeamWorkflow teamWf) {
return teamWf.getTeamDefinition().getName();
}
}