Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordonald.g.dunne2016-02-12 15:30:47 +0000
committerRyan D. Brooks2016-02-12 15:30:47 +0000
commit6f2502aa6039770325f733fbefedf18d64ceecc0 (patch)
treebb2177d4fee68206adc97cd1708913f99b2e1fd9 /plugins
parent7ef50bfc435bb99f9dfc8dd1bc7270658f207bda (diff)
downloadorg.eclipse.osee-6f2502aa6039770325f733fbefedf18d64ceecc0.tar.gz
org.eclipse.osee-6f2502aa6039770325f733fbefedf18d64ceecc0.tar.xz
org.eclipse.osee-6f2502aa6039770325f733fbefedf18d64ceecc0.zip
feature[ats_ATS263337]: Add metrics to ATS Earned Value Service
Diffstat (limited to 'plugins')
-rw-r--r--plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/IAtsServices.java3
-rw-r--r--plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/IAtsWorkItem.java8
-rw-r--r--plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/ev/IAtsEarnedValueService.java15
-rw-r--r--plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/review/IAtsAbstractReview.java4
-rw-r--r--plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/ev/AtsEarnedValueImpl.java104
-rw-r--r--plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/workflow/WorkItem.java19
-rw-r--r--plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/review/AbstractReviewArtifact.java9
-rw-r--r--plugins/org.eclipse.osee.ats.core.test/src/org/eclipse/osee/ats/core/mock/MockWorkItem.java20
-rw-r--r--plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/util/AtsAbstractEarnedValueImpl.java198
-rw-r--r--plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/AtsServerImpl.java8
-rw-r--r--plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/util/AtsEarnedValueImpl.java44
-rw-r--r--plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/workitem/model/AbstractReview.java4
-rw-r--r--plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/workitem/model/WorkItem.java20
13 files changed, 355 insertions, 101 deletions
diff --git a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/IAtsServices.java b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/IAtsServices.java
index 1139bc4d7bb..126975c1bf3 100644
--- a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/IAtsServices.java
+++ b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/IAtsServices.java
@@ -11,6 +11,7 @@
package org.eclipse.osee.ats.api;
import java.util.Collection;
+import org.eclipse.osee.ats.api.ev.IAtsEarnedValueService;
import org.eclipse.osee.ats.api.program.IAtsProgramService;
import org.eclipse.osee.ats.api.query.IAtsQueryService;
import org.eclipse.osee.ats.api.review.IAtsReviewService;
@@ -104,4 +105,6 @@ public interface IAtsServices {
IAtsQueryService getQueryService();
+ IAtsEarnedValueService getEarnedValueService();
+
}
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 a03b5c10773..ee580e174bf 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
@@ -73,4 +73,12 @@ public interface IAtsWorkItem extends IAtsObject, HasAssignees {
boolean isGoal();
+ boolean isInWork();
+
+ boolean isCompleted();
+
+ boolean isCompletedOrCancelled();
+
+ boolean isCancelled();
+
}
diff --git a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/ev/IAtsEarnedValueService.java b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/ev/IAtsEarnedValueService.java
index 7ca1065c105..73af8a54fe0 100644
--- a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/ev/IAtsEarnedValueService.java
+++ b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/ev/IAtsEarnedValueService.java
@@ -14,6 +14,7 @@ import java.util.Collection;
import org.eclipse.osee.ats.api.IAtsObject;
import org.eclipse.osee.ats.api.IAtsWorkItem;
import org.eclipse.osee.ats.api.insertion.IAtsInsertionActivity;
+import org.eclipse.osee.ats.api.workdef.IStateToken;
import org.eclipse.osee.framework.core.data.ArtifactId;
import org.eclipse.osee.framework.jdk.core.type.OseeCoreException;
@@ -38,4 +39,18 @@ public interface IAtsEarnedValueService {
public Collection<IAtsWorkPackage> getWorkPackages(IAtsInsertionActivity insertionActivity);
+ double getEstimatedHoursFromArtifact(IAtsWorkItem workItem);
+
+ double getEstimatedHoursFromTasks(IAtsWorkItem workItem, IStateToken relatedToState);
+
+ double getEstimatedHoursFromTasks(IAtsWorkItem workItem);
+
+ double getEstimatedHoursFromReviews(IAtsWorkItem workItem) throws OseeCoreException;
+
+ double getEstimatedHoursFromReviews(IAtsWorkItem workItem, IStateToken relatedToState) throws OseeCoreException;
+
+ double getEstimatedHoursTotal(IAtsWorkItem workItem, IStateToken relatedToState) throws OseeCoreException;
+
+ double getEstimatedHoursTotal(IAtsWorkItem workItem) throws OseeCoreException;
+
}
diff --git a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/review/IAtsAbstractReview.java b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/review/IAtsAbstractReview.java
index 8bbcd727238..eb90754ad93 100644
--- a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/review/IAtsAbstractReview.java
+++ b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/review/IAtsAbstractReview.java
@@ -17,5 +17,7 @@ import org.eclipse.osee.ats.api.ai.IAtsActionableItemProvider;
* @author Donald G. Dunne
*/
public interface IAtsAbstractReview extends IAtsWorkItem, IAtsActionableItemProvider {
- // do nothing
+
+ String getRelatedToState();
+
}
diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/ev/AtsEarnedValueImpl.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/ev/AtsEarnedValueImpl.java
index ca04ca68829..3dc6258acf2 100644
--- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/ev/AtsEarnedValueImpl.java
+++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/ev/AtsEarnedValueImpl.java
@@ -10,35 +10,20 @@
*******************************************************************************/
package org.eclipse.osee.ats.core.client.internal.ev;
-import java.util.ArrayList;
import java.util.Collection;
-import java.util.List;
-import org.eclipse.osee.ats.api.IAtsConfigObject;
-import org.eclipse.osee.ats.api.IAtsObject;
import org.eclipse.osee.ats.api.IAtsServices;
import org.eclipse.osee.ats.api.IAtsWorkItem;
-import org.eclipse.osee.ats.api.ai.IAtsActionableItem;
import org.eclipse.osee.ats.api.data.AtsAttributeTypes;
-import org.eclipse.osee.ats.api.data.AtsRelationTypes;
import org.eclipse.osee.ats.api.ev.AtsWorkPackageEndpointApi;
-import org.eclipse.osee.ats.api.ev.IAtsEarnedValueService;
import org.eclipse.osee.ats.api.ev.IAtsWorkPackage;
import org.eclipse.osee.ats.api.ev.JaxWorkPackageData;
-import org.eclipse.osee.ats.api.insertion.IAtsInsertionActivity;
-import org.eclipse.osee.ats.api.review.IAtsAbstractReview;
import org.eclipse.osee.ats.api.util.AtsEvents;
-import org.eclipse.osee.ats.api.workflow.IAtsTeamWorkflow;
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.WorkPackage;
+import org.eclipse.osee.ats.core.util.AtsAbstractEarnedValueImpl;
import org.eclipse.osee.ats.core.util.AtsObjects;
-import org.eclipse.osee.ats.core.util.AtsUtilCore;
-import org.eclipse.osee.framework.core.data.ArtifactId;
-import org.eclipse.osee.framework.jdk.core.type.OseeCoreException;
import org.eclipse.osee.framework.jdk.core.util.Conditions;
-import org.eclipse.osee.framework.jdk.core.util.Strings;
import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
import org.eclipse.osee.framework.skynet.core.attribute.AttributeTypeManager;
import org.eclipse.osee.framework.skynet.core.event.OseeEventManager;
import org.eclipse.osee.framework.skynet.core.event.model.EventType;
@@ -48,15 +33,12 @@ import org.eclipse.osee.logger.Log;
/**
* @author Donald G. Dunne
*/
-public class AtsEarnedValueImpl implements IAtsEarnedValueService {
-
- private final Log logger;
- private final IAtsServices services;
+public class AtsEarnedValueImpl extends AtsAbstractEarnedValueImpl {
public AtsEarnedValueImpl(Log logger, IAtsServices services) {
- this.logger = logger;
- this.services = services;
+ super(logger, services);
}
+
@Override
public String getWorkPackageId(IAtsWorkItem workItem) {
String guid = null;
@@ -70,65 +52,6 @@ public class AtsEarnedValueImpl implements IAtsEarnedValueService {
}
@Override
- public IAtsWorkPackage getWorkPackage(IAtsWorkItem workItem) throws OseeCoreException {
- WorkPackage wpa = null;
- String workPackageGuid = getWorkPackageId(workItem);
- if (Strings.isValid(workPackageGuid)) {
- Artifact workPkgArt = ArtifactQuery.getArtifactFromId(workPackageGuid, AtsUtilCore.getAtsBranch());
- wpa = new WorkPackage(logger, workPkgArt, services);
- }
- return wpa;
- }
-
- @Override
- public Collection<IAtsWorkPackage> getWorkPackageOptions(IAtsObject object) throws OseeCoreException {
- List<IAtsWorkPackage> workPackageOptions = new ArrayList<>();
- getWorkPackageOptions(object, workPackageOptions);
- return workPackageOptions;
- }
-
- public Collection<IAtsWorkPackage> getWorkPackageOptions(IAtsObject object, List<IAtsWorkPackage> workPackageOptions) throws OseeCoreException {
- // Config objects get work package options from related work package artifacts
- if (object instanceof IAtsConfigObject) {
- IAtsConfigObject configObj = (IAtsConfigObject) object;
- Artifact artifact = AtsClientService.get().getArtifact(configObj);
- if (artifact != null) {
- for (Artifact workPackageArt : artifact.getRelatedArtifacts(AtsRelationTypes.WorkPackage_WorkPackage)) {
- workPackageOptions.add(new WorkPackage(logger, workPackageArt, services));
- }
- }
- }
- // Team Wf get work package options of Ais and Team Definition
- else if (object instanceof IAtsTeamWorkflow) {
- IAtsTeamWorkflow teamWf = (IAtsTeamWorkflow) object;
- getWorkPackageOptions(teamWf.getTeamDefinition(), workPackageOptions);
- for (IAtsActionableItem ai : teamWf.getActionableItems()) {
- getWorkPackageOptions(ai, workPackageOptions);
- }
- }
- // Children work items inherit the work packages options of their parent team workflow
- else if (object instanceof IAtsWorkItem) {
- IAtsWorkItem workItem = (IAtsWorkItem) object;
- // Work Items related to Team Wf get their options from Team Wf
- IAtsTeamWorkflow teamWf = workItem.getParentTeamWorkflow();
- if (teamWf != null) {
- getWorkPackageOptions(teamWf, workPackageOptions);
- }
- // Stand-alone reviews get their options from related AIs and Team Defs
- else if (workItem instanceof IAtsAbstractReview) {
- IAtsAbstractReview review = (IAtsAbstractReview) workItem;
- for (IAtsActionableItem ai : review.getActionableItems()) {
- getWorkPackageOptions(ai, workPackageOptions);
- if (ai.getTeamDefinition() != null) {
- getWorkPackageOptions(ai.getTeamDefinition(), workPackageOptions);
- }
- }
- }
- }
- return workPackageOptions;
- }
-
- @Override
public void setWorkPackage(IAtsWorkPackage workPackage, Collection<IAtsWorkItem> workItems) {
changeWorkPackage(workPackage, workItems, false);
}
@@ -140,7 +63,7 @@ public class AtsEarnedValueImpl implements IAtsEarnedValueService {
private void changeWorkPackage(IAtsWorkPackage workPackage, Collection<IAtsWorkItem> workItems, boolean remove) {
JaxWorkPackageData data = new JaxWorkPackageData();
- data.setAsUserId(AtsClientService.get().getUserService().getCurrentUserId());
+ data.setAsUserId(services.getUserService().getCurrentUserId());
for (IAtsWorkItem workItem : workItems) {
data.getWorkItemUuids().add(workItem.getUuid());
}
@@ -156,12 +79,7 @@ public class AtsEarnedValueImpl implements IAtsEarnedValueService {
AtsObjects.toUuidsString(";", workItems), EventType.LocalAndRemote);
OseeEventManager.kickTopicEvent(getClass(), event);
- AtsClientService.get().getStoreService().reload(workItems);
- }
-
- @Override
- public IAtsWorkPackage getWorkPackage(ArtifactId artifact) {
- return new WorkPackage(logger, artifact, services);
+ services.getStoreService().reload(workItems);
}
@Override
@@ -169,14 +87,4 @@ public class AtsEarnedValueImpl implements IAtsEarnedValueService {
return AttributeTypeManager.getEnumerationValues(AtsAttributeTypes.ColorTeam);
}
- @Override
- public Collection<IAtsWorkPackage> getWorkPackages(IAtsInsertionActivity insertionActivity) {
- List<IAtsWorkPackage> workPackages = new ArrayList<>();
- for (Artifact artifact : AtsClientService.get().getArtifact(insertionActivity.getUuid()).getRelatedArtifacts(
- AtsRelationTypes.InsertionActivityToWorkPackage_WorkPackage)) {
- workPackages.add(new WorkPackage(logger, artifact, services));
- }
- return workPackages;
- }
-
}
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 6ec1e5435c9..10f838ab1ec 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
@@ -278,4 +278,23 @@ public class WorkItem extends AtsObject implements IAtsWorkItem {
return artifact.getSoleAttributeValue(AtsAttributeTypes.CancelledReason, null);
}
+ @Override
+ public boolean isInWork() {
+ return getStateMgr().getStateType().isInWork();
+ }
+
+ @Override
+ public boolean isCompleted() {
+ return getStateMgr().getStateType().isCompleted();
+ }
+
+ @Override
+ public boolean isCompletedOrCancelled() {
+ return isCompleted() || isCancelled();
+ }
+
+ @Override
+ public boolean isCancelled() {
+ return getStateMgr().getStateType().isCancelled();
+ }
}
diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/review/AbstractReviewArtifact.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/review/AbstractReviewArtifact.java
index 4f86fe4bda6..a6b190ccf9c 100644
--- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/review/AbstractReviewArtifact.java
+++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/review/AbstractReviewArtifact.java
@@ -16,10 +16,10 @@ import java.util.List;
import java.util.Set;
import java.util.logging.Level;
import org.eclipse.osee.ats.api.ai.IAtsActionableItem;
-import org.eclipse.osee.ats.api.ai.IAtsActionableItemProvider;
import org.eclipse.osee.ats.api.data.AtsArtifactTypes;
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.review.UserRole;
import org.eclipse.osee.ats.api.team.IAtsTeamDefinition;
import org.eclipse.osee.ats.api.user.IAtsUser;
@@ -41,7 +41,7 @@ import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
/**
* @author Donald G. Dunne
*/
-public abstract class AbstractReviewArtifact extends AbstractWorkflowArtifact implements IAtsActionableItemProvider {
+public abstract class AbstractReviewArtifact extends AbstractWorkflowArtifact implements IAtsAbstractReview {
private ActionableItemManager actionableItemsDam;
private Boolean standAlone = null;
@@ -206,4 +206,9 @@ public abstract class AbstractReviewArtifact extends AbstractWorkflowArtifact im
return getActionableItemsDam().getActionableItems();
}
+ @Override
+ public String getRelatedToState() {
+ return getSoleAttributeValue(AtsAttributeTypes.RelatedToState, "");
+ }
+
}
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 cb7256601f8..6bc54fe23e6 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
@@ -246,4 +246,24 @@ public class MockWorkItem implements IAtsWorkItem {
return false;
}
+ @Override
+ public boolean isInWork() {
+ return getStateMgr().getStateType().isInWork();
+ }
+
+ @Override
+ public boolean isCompleted() {
+ return getStateMgr().getStateType().isCompleted();
+ }
+
+ @Override
+ public boolean isCompletedOrCancelled() {
+ return isCompleted() || isCancelled();
+ }
+
+ @Override
+ public boolean isCancelled() {
+ return getStateMgr().getStateType().isCancelled();
+ }
+
}
diff --git a/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/util/AtsAbstractEarnedValueImpl.java b/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/util/AtsAbstractEarnedValueImpl.java
new file mode 100644
index 00000000000..96f4f39b689
--- /dev/null
+++ b/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/util/AtsAbstractEarnedValueImpl.java
@@ -0,0 +1,198 @@
+/*******************************************************************************
+ * 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.util;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import org.eclipse.osee.ats.api.IAtsConfigObject;
+import org.eclipse.osee.ats.api.IAtsObject;
+import org.eclipse.osee.ats.api.IAtsServices;
+import org.eclipse.osee.ats.api.IAtsWorkItem;
+import org.eclipse.osee.ats.api.ai.IAtsActionableItem;
+import org.eclipse.osee.ats.api.data.AtsAttributeTypes;
+import org.eclipse.osee.ats.api.data.AtsRelationTypes;
+import org.eclipse.osee.ats.api.ev.IAtsEarnedValueService;
+import org.eclipse.osee.ats.api.ev.IAtsWorkPackage;
+import org.eclipse.osee.ats.api.insertion.IAtsInsertionActivity;
+import org.eclipse.osee.ats.api.review.IAtsAbstractReview;
+import org.eclipse.osee.ats.api.workdef.IStateToken;
+import org.eclipse.osee.ats.api.workflow.IAtsTask;
+import org.eclipse.osee.ats.api.workflow.IAtsTeamWorkflow;
+import org.eclipse.osee.ats.core.model.WorkPackage;
+import org.eclipse.osee.framework.core.data.ArtifactId;
+import org.eclipse.osee.framework.jdk.core.type.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.Conditions;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.logger.Log;
+
+/**
+ * @author Donald G. Dunne
+ */
+public abstract class AtsAbstractEarnedValueImpl implements IAtsEarnedValueService {
+
+ protected final Log logger;
+ protected final IAtsServices services;
+
+ public AtsAbstractEarnedValueImpl(Log logger, IAtsServices services) {
+ this.logger = logger;
+ this.services = services;
+ }
+
+ @Override
+ public String getWorkPackageId(IAtsWorkItem workItem) {
+ ArtifactId artifact = services.getArtifact(workItem);
+ Conditions.checkNotNull(artifact, "workItem", "Can't Find Work Package matching %s", workItem.toStringWithId());
+ return services.getAttributeResolver().getSoleAttributeValue(workItem, AtsAttributeTypes.WorkPackageGuid, null);
+ }
+
+ @Override
+ public IAtsWorkPackage getWorkPackage(IAtsWorkItem workItem) throws OseeCoreException {
+ WorkPackage wpa = null;
+ String workPackageGuid = getWorkPackageId(workItem);
+ if (Strings.isValid(workPackageGuid)) {
+ ArtifactId workPkgArt = services.getArtifactById(workPackageGuid);
+ wpa = new WorkPackage(logger, workPkgArt, services);
+ }
+ return wpa;
+ }
+
+ @Override
+ public Collection<IAtsWorkPackage> getWorkPackageOptions(IAtsObject object) throws OseeCoreException {
+ List<IAtsWorkPackage> workPackageOptions = new ArrayList<>();
+ getWorkPackageOptions(object, workPackageOptions);
+ return workPackageOptions;
+ }
+
+ public Collection<IAtsWorkPackage> getWorkPackageOptions(IAtsObject object, List<IAtsWorkPackage> workPackageOptions) throws OseeCoreException {
+ // Config objects get work package options from related work package artifacts
+ if (object instanceof IAtsConfigObject) {
+ IAtsConfigObject configObj = (IAtsConfigObject) object;
+ ArtifactId artifact = services.getArtifact(configObj);
+ if (artifact != null) {
+ for (ArtifactId workPackageArt : services.getRelationResolver().getRelated(artifact,
+ AtsRelationTypes.WorkPackage_WorkPackage)) {
+ workPackageOptions.add(new WorkPackage(logger, workPackageArt, services));
+ }
+ }
+ }
+ // Team Wf get work package options of Ais and Team Definition
+ else if (object instanceof IAtsTeamWorkflow) {
+ IAtsTeamWorkflow teamWf = (IAtsTeamWorkflow) object;
+ getWorkPackageOptions(teamWf.getTeamDefinition(), workPackageOptions);
+ for (IAtsActionableItem ai : teamWf.getActionableItems()) {
+ getWorkPackageOptions(ai, workPackageOptions);
+ }
+ }
+ // Children work items inherit the work packages options of their parent team workflow
+ else if (object instanceof IAtsWorkItem) {
+ IAtsWorkItem workItem = (IAtsWorkItem) object;
+ // Work Items related to Team Wf get their options from Team Wf
+ IAtsTeamWorkflow teamWf = workItem.getParentTeamWorkflow();
+ if (teamWf != null) {
+ getWorkPackageOptions(teamWf, workPackageOptions);
+ }
+ // Stand-alone reviews get their options from related AIs and Team Defs
+ else if (workItem instanceof IAtsAbstractReview) {
+ IAtsAbstractReview review = (IAtsAbstractReview) workItem;
+ for (IAtsActionableItem ai : review.getActionableItems()) {
+ getWorkPackageOptions(ai, workPackageOptions);
+ if (ai.getTeamDefinition() != null) {
+ getWorkPackageOptions(ai.getTeamDefinition(), workPackageOptions);
+ }
+ }
+ }
+ }
+ return workPackageOptions;
+ }
+
+ @Override
+ public IAtsWorkPackage getWorkPackage(ArtifactId artifact) {
+ return new WorkPackage(logger, artifact, services);
+ }
+
+ @Override
+ public Collection<IAtsWorkPackage> getWorkPackages(IAtsInsertionActivity insertionActivity) {
+ List<IAtsWorkPackage> workPackages = new ArrayList<>();
+ for (ArtifactId artifact : services.getRelationResolver().getRelated(
+ services.getArtifact(insertionActivity.getUuid()),
+ AtsRelationTypes.InsertionActivityToWorkPackage_WorkPackage)) {
+ workPackages.add(new WorkPackage(logger, artifact, services));
+ }
+ return workPackages;
+ }
+
+ @Override
+ public double getEstimatedHoursFromArtifact(IAtsWorkItem workItem) {
+ return services.getAttributeResolver().getSoleAttributeValue(workItem, AtsAttributeTypes.EstimatedHours, 0.0);
+ }
+
+ @Override
+ public double getEstimatedHoursFromTasks(IAtsWorkItem workItem, IStateToken relatedToState) {
+ if (!(workItem instanceof IAtsTeamWorkflow)) {
+ return 0;
+ }
+ return getEstimatedHoursFromTasks((workItem), relatedToState);
+ }
+
+ /**
+ * Return Estimated Hours for all tasks
+ */
+ @Override
+ public double getEstimatedHoursFromTasks(IAtsWorkItem workItem) {
+ if (!(workItem instanceof IAtsTeamWorkflow)) {
+ return 0;
+ }
+ double hours = 0;
+ for (IAtsTask task : services.getTaskService().getTaskArtifacts(workItem)) {
+ hours += getEstimatedHoursFromArtifact(task);
+ }
+ return hours;
+ }
+
+ @Override
+ public double getEstimatedHoursFromReviews(IAtsWorkItem workItem) throws OseeCoreException {
+ double hours = 0;
+ if (workItem.isTeamWorkflow()) {
+ for (IAtsAbstractReview review : services.getReviewService().getReviews((IAtsTeamWorkflow) workItem)) {
+ hours += getEstimatedHoursFromArtifact(review);
+ }
+ }
+ return hours;
+ }
+
+ @Override
+ public double getEstimatedHoursFromReviews(IAtsWorkItem workItem, IStateToken relatedToState) throws OseeCoreException {
+ double hours = 0;
+ if (workItem.isTeamWorkflow()) {
+ IAtsTeamWorkflow teamWf = (IAtsTeamWorkflow) workItem;
+ for (IAtsAbstractReview review : services.getReviewService().getReviews(teamWf)) {
+ if (review.getRelatedToState().equals(relatedToState.getName())) {
+ hours += getEstimatedHoursFromArtifact(review);
+ }
+ }
+ }
+ return hours;
+ }
+
+ @Override
+ public double getEstimatedHoursTotal(IAtsWorkItem workItem, IStateToken relatedToState) throws OseeCoreException {
+ return getEstimatedHoursFromArtifact(workItem) + getEstimatedHoursFromTasks(workItem,
+ relatedToState) + getEstimatedHoursFromReviews(workItem, relatedToState);
+ }
+
+ @Override
+ public double getEstimatedHoursTotal(IAtsWorkItem workItem) throws OseeCoreException {
+ return getEstimatedHoursFromArtifact(workItem) + getEstimatedHoursFromTasks(
+ workItem) + getEstimatedHoursFromReviews(workItem);
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/AtsServerImpl.java b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/AtsServerImpl.java
index b72a36ff282..cd39e5a9193 100644
--- a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/AtsServerImpl.java
+++ b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/AtsServerImpl.java
@@ -26,6 +26,7 @@ import org.eclipse.osee.ats.api.IAtsWorkItem;
import org.eclipse.osee.ats.api.agile.IAgileService;
import org.eclipse.osee.ats.api.data.AtsArtifactToken;
import org.eclipse.osee.ats.api.data.AtsAttributeTypes;
+import org.eclipse.osee.ats.api.ev.IAtsEarnedValueService;
import org.eclipse.osee.ats.api.notify.AtsNotificationCollector;
import org.eclipse.osee.ats.api.program.IAtsProgramService;
import org.eclipse.osee.ats.api.query.IAtsQueryService;
@@ -78,6 +79,7 @@ import org.eclipse.osee.ats.rest.internal.util.ArtifactResolverImpl;
import org.eclipse.osee.ats.rest.internal.util.AtsArtifactConfigCache;
import org.eclipse.osee.ats.rest.internal.util.AtsAttributeResolverServiceImpl;
import org.eclipse.osee.ats.rest.internal.util.AtsBranchServiceImpl;
+import org.eclipse.osee.ats.rest.internal.util.AtsEarnedValueImpl;
import org.eclipse.osee.ats.rest.internal.util.AtsRelationResolverServiceImpl;
import org.eclipse.osee.ats.rest.internal.util.AtsReviewServiceImpl;
import org.eclipse.osee.ats.rest.internal.util.AtsStoreServiceImpl;
@@ -143,6 +145,7 @@ public class AtsServerImpl extends AtsCoreServiceImpl implements IAtsServer {
private IAgileService agileService;
private IAtsQueryService atsQueryService;
private IAtsTaskService taskService;
+ private IAtsEarnedValueService earnedValueService;
private volatile boolean emailEnabled = true;
private boolean loggedNotificationDisabled = false;
@@ -239,6 +242,7 @@ public class AtsServerImpl extends AtsCoreServiceImpl implements IAtsServer {
atsQueryService = new AtsQueryServiceIimpl(this);
versionService = new AtsVersionServiceImpl(getServices());
taskService = new AtsTaskService(this);
+ earnedValueService = new AtsEarnedValueImpl(logger, this);
addAtsDatabaseConversion(new ConvertBaselineGuidToBaselineUuid(logger, jdbcClient, orcsApi, this));
addAtsDatabaseConversion(new ConvertFavoriteBranchGuidToUuid(logger, jdbcClient, orcsApi, this));
@@ -604,4 +608,8 @@ public class AtsServerImpl extends AtsCoreServiceImpl implements IAtsServer {
name).getResults().getAtMostOneOrNull();
}
+ @Override
+ public IAtsEarnedValueService getEarnedValueService() {
+ return earnedValueService;
+ }
}
diff --git a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/util/AtsEarnedValueImpl.java b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/util/AtsEarnedValueImpl.java
new file mode 100644
index 00000000000..0877102b5b5
--- /dev/null
+++ b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/util/AtsEarnedValueImpl.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2016 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.rest.internal.util;
+
+import java.util.Collection;
+import org.eclipse.osee.ats.api.IAtsServices;
+import org.eclipse.osee.ats.api.IAtsWorkItem;
+import org.eclipse.osee.ats.api.ev.IAtsWorkPackage;
+import org.eclipse.osee.ats.core.util.AtsAbstractEarnedValueImpl;
+import org.eclipse.osee.logger.Log;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class AtsEarnedValueImpl extends AtsAbstractEarnedValueImpl {
+
+ public AtsEarnedValueImpl(Log logger, IAtsServices services) {
+ super(logger, services);
+ }
+
+ @Override
+ public void setWorkPackage(IAtsWorkPackage workPackage, Collection<IAtsWorkItem> workItems) {
+ throw new UnsupportedOperationException("operation not supported on server");
+ }
+
+ @Override
+ public void removeWorkPackage(IAtsWorkPackage workPackage, Collection<IAtsWorkItem> workItems) {
+ throw new UnsupportedOperationException("operation not supported on server");
+ }
+
+ @Override
+ public Collection<String> getColorTeams() {
+ throw new UnsupportedOperationException("operation not supported on server");
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/workitem/model/AbstractReview.java b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/workitem/model/AbstractReview.java
index bb64a555627..d62a97ef9c7 100644
--- a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/workitem/model/AbstractReview.java
+++ b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/workitem/model/AbstractReview.java
@@ -41,4 +41,8 @@ public abstract class AbstractReview extends WorkItem implements IAtsAbstractRev
return ais;
}
+ @Override
+ public String getRelatedToState() {
+ return artifact.getSoleAttributeValue(AtsAttributeTypes.RelatedToState, "");
+ }
}
diff --git a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/workitem/model/WorkItem.java b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/workitem/model/WorkItem.java
index 038df26900b..57fea74b2dc 100644
--- a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/workitem/model/WorkItem.java
+++ b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/workitem/model/WorkItem.java
@@ -273,4 +273,24 @@ public class WorkItem extends AtsObject implements IAtsWorkItem {
return artifact.getSoleAttributeValue(AtsAttributeTypes.CancelledReason, null);
}
+ @Override
+ public boolean isInWork() {
+ return getStateMgr().getStateType().isInWork();
+ }
+
+ @Override
+ public boolean isCompleted() {
+ return getStateMgr().getStateType().isCompleted();
+ }
+
+ @Override
+ public boolean isCompletedOrCancelled() {
+ return isCompleted() || isCancelled();
+ }
+
+ @Override
+ public boolean isCancelled() {
+ return getStateMgr().getStateType().isCancelled();
+ }
+
}

Back to the top