blob: b4d3a76c1e886c5b837711faac0c96bb55c971ed [file] [log] [blame]
/*********************************************************************
* Copyright (c) 2013 Boeing
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Boeing - initial API and implementation
**********************************************************************/
package org.eclipse.osee.ats.api;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import org.eclipse.osee.ats.api.config.WorkType;
import org.eclipse.osee.ats.api.data.AtsArtifactTypes;
import org.eclipse.osee.ats.api.user.AtsUser;
import org.eclipse.osee.ats.api.workdef.IAtsStateDefinition;
import org.eclipse.osee.ats.api.workdef.IAtsWorkDefinition;
import org.eclipse.osee.ats.api.workdef.IStateToken;
import org.eclipse.osee.ats.api.workflow.HasAssignees;
import org.eclipse.osee.ats.api.workflow.IAtsAction;
import org.eclipse.osee.ats.api.workflow.IAtsGoal;
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.framework.core.data.ArtifactTypeToken;
import org.eclipse.osee.framework.core.enums.CoreAttributeTypes;
import org.eclipse.osee.framework.jdk.core.type.NamedIdBase;
import org.eclipse.osee.framework.jdk.core.util.Strings;
/**
* @author Donald G. Dunne
*/
public interface IAtsWorkItem extends IAtsObject, HasAssignees {
String getAtsId();
IAtsTeamWorkflow getParentTeamWorkflow();
IAtsStateManager getStateMgr();
IAtsLog getLog();
IAtsWorkDefinition getWorkDefinition();
IAtsStateDefinition getStateDefinition();
AtsUser getCreatedBy();
Date getCreatedDate();
AtsUser getCompletedBy();
AtsUser getCancelledBy();
String getCompletedFromState();
String getCancelledFromState();
String getArtifactTypeName();
Date getCompletedDate();
Date getCancelledDate();
String getCancelledReason();
IAtsAction getParentAction();
IAtsWorkItem SENTINEL = createSentinel();
default boolean isTeamWorkflow() {
return isOfType(AtsArtifactTypes.TeamWorkflow);
}
default boolean isDecisionReview() {
return isOfType(AtsArtifactTypes.DecisionReview);
}
default boolean isPeerReview() {
return isOfType(AtsArtifactTypes.PeerToPeerReview);
}
default boolean isTask() {
return isOfType(AtsArtifactTypes.Task);
}
default boolean isReview() {
return isOfType(AtsArtifactTypes.AbstractReview);
}
default boolean isSprint() {
return isOfType(AtsArtifactTypes.AgileSprint);
}
default boolean isBacklog() {
return isOfType(AtsArtifactTypes.AgileBacklog);
}
default boolean isGoal() {
return this instanceof IAtsGoal;
}
default boolean isInWork() {
return getStateDefinition().getStateType().isWorkingState();
}
default boolean isCompleted() {
return getStateDefinition().getStateType().isCompletedState();
}
default boolean isCancelled() {
return getStateDefinition().getStateType().isCancelledState();
}
default boolean isCompletedOrCancelled() {
return isCompleted() || isCancelled();
}
default boolean hasAction() {
return true;
}
void setStateMgr(IAtsStateManager stateMgr);
void clearCaches();
boolean isInState(IStateToken state);
@Override
default public Collection<String> getTags() {
return getAtsApi().getAttributeResolver().getAttributesToStringList(getStoreObject(),
CoreAttributeTypes.StaticId);
}
default public void setTags(List<String> tags) {
throw new UnsupportedOperationException("Invalid method for IAtsWorkItem; use IAtsChangeSet");
}
@Override
default public boolean hasTag(String tag) {
return getTags().contains(tag);
}
@Override
default String toStringWithId() {
return String.format("[%s]-[%s]-[%s]", getName(), getAtsId(), getIdString());
}
@Override
default String toStringWithId(int nameTruncateLength) {
return String.format("[%s]-[%s]-[%s]", Strings.truncate(getName(), nameTruncateLength, true), getAtsId(),
getIdString());
}
default String toStringWithAtsId() {
return String.format("[%s]-[%s]", getName(), getAtsId());
}
default boolean isChangeRequest() {
return getArtifactType().inheritsFrom(AtsArtifactTypes.AbstractChangeRequestWorkflow);
}
public static IAtsWorkItem createSentinel() {
final class IAtsWorkItemSentinel extends NamedIdBase implements IAtsWorkItem {
@Override
public ArtifactTypeToken getArtifactType() {
return null;
}
@Override
public List<AtsUser> getAssignees() {
return null;
}
@Override
public List<AtsUser> getImplementers() {
return null;
}
@Override
public String getAtsId() {
return null;
}
@Override
public IAtsTeamWorkflow getParentTeamWorkflow() {
return null;
}
@Override
public IAtsStateManager getStateMgr() {
return null;
}
@Override
public IAtsLog getLog() {
return null;
}
@Override
public IAtsWorkDefinition getWorkDefinition() {
return null;
}
@Override
public IAtsStateDefinition getStateDefinition() {
return null;
}
@Override
public AtsUser getCreatedBy() {
return null;
}
@Override
public Date getCreatedDate() {
return null;
}
@Override
public AtsUser getCompletedBy() {
return null;
}
@Override
public AtsUser getCancelledBy() {
return null;
}
@Override
public String getCompletedFromState() {
return null;
}
@Override
public String getCancelledFromState() {
return null;
}
@Override
public String getArtifactTypeName() {
return null;
}
@Override
public Date getCompletedDate() {
return null;
}
@Override
public Date getCancelledDate() {
return null;
}
@Override
public String getCancelledReason() {
return null;
}
@Override
public IAtsAction getParentAction() {
return null;
}
@Override
public void setStateMgr(IAtsStateManager stateMgr) {
// do nothing
}
@Override
public void clearCaches() {
// do nothing
}
@Override
public AtsApi getAtsApi() {
return null;
}
@Override
public boolean isInState(IStateToken state) {
return false;
}
@Override
public Collection<WorkType> getWorkTypes() {
return null;
}
@Override
public boolean isWorkType(WorkType workType) {
return false;
}
@Override
public Collection<String> getTags() {
return null;
}
@Override
public boolean hasTag(String tag) {
return false;
}
@Override
public boolean isSprint() {
return false;
}
}
return new IAtsWorkItemSentinel();
}
}