diff options
61 files changed, 1511 insertions, 824 deletions
diff --git a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/task/AbstractAtsTaskService.java b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/task/AbstractAtsTaskService.java index 70c2b98755e..0b5292a72a1 100644 --- a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/task/AbstractAtsTaskService.java +++ b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/task/AbstractAtsTaskService.java @@ -30,11 +30,19 @@ public abstract class AbstractAtsTaskService implements IAtsTaskService { } @Override + public NewTaskData getNewTaskData(IAtsTeamWorkflow teamWf, List<String> titles, List<IAtsUser> assignees, Date createdDate, IAtsUser createdBy, String relatedToState, String taskWorkDef, Map<String, List<String>> attributes) { + return getNewTaskData(teamWf, titles, assignees, createdDate, createdBy, relatedToState, taskWorkDef, attributes, + null); + } + + @Override + public Collection<IAtsTask> createTasks(NewTaskData newTaskData) { + return createTasks(new NewTaskDatas(newTaskData)); + } + + @Override public NewTaskData getNewTaskData(IAtsTeamWorkflow teamWf, List<String> titles, List<IAtsUser> assignees, Date createdDate, IAtsUser createdBy, String relatedToState, String taskWorkDef, Map<String, List<String>> attributes, String commitComment) { - NewTaskData newTaskData = new NewTaskData(); - newTaskData.setCommitComment(commitComment); - newTaskData.setAsUserId(createdBy.getUserId()); - newTaskData.setTeamWfUuid(teamWf.getUuid()); + NewTaskData newTaskData = NewTaskDataFactory.get("Import Tasks from Simple List", createdBy, teamWf); if (createdDate == null) { createdDate = new Date(); } @@ -63,6 +71,7 @@ public abstract class AbstractAtsTaskService implements IAtsTaskService { task.addAttributes(entry.getKey(), entry.getValue()); } } + newTaskData.setCommitComment(commitComment); } return newTaskData; } diff --git a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/task/AtsTaskEndpointApi.java b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/task/AtsTaskEndpointApi.java index 21814c249bd..83d632be43b 100644 --- a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/task/AtsTaskEndpointApi.java +++ b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/task/AtsTaskEndpointApi.java @@ -27,7 +27,7 @@ public interface AtsTaskEndpointApi { @POST @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) - public Response create(NewTaskData newTaskData); + public Response create(NewTaskDatas newTaskDatas); @POST public Response get(long taskUuid); diff --git a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/task/IAtsTaskService.java b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/task/IAtsTaskService.java index a71b62e7cbe..1a2d99e4b69 100644 --- a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/task/IAtsTaskService.java +++ b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/task/IAtsTaskService.java @@ -34,4 +34,8 @@ public interface IAtsTaskService { Collection<IAtsTask> createTasks(NewTaskData newTaskData, IAtsChangeSet changes); + Collection<IAtsTask> createTasks(NewTaskDatas newTaskDatas); + + NewTaskData getNewTaskData(IAtsTeamWorkflow teamWf, List<String> titles, List<IAtsUser> assignees, Date createdDate, IAtsUser createdBy, String relatedToState, String taskWorkDef, Map<String, List<String>> attributes); + } diff --git a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/task/JaxAtsTask.java b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/task/JaxAtsTask.java index 44dae70420f..9ebb41fe449 100644 --- a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/task/JaxAtsTask.java +++ b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/task/JaxAtsTask.java @@ -16,6 +16,8 @@ import java.util.LinkedList; import java.util.List; import javax.xml.bind.annotation.XmlRootElement; import org.eclipse.osee.ats.api.config.JaxAtsObject; +import org.eclipse.osee.framework.core.data.IAttributeType; +import org.eclipse.osee.framework.core.data.IRelationTypeSide; /** * @author Donald G. Dunne @@ -29,6 +31,7 @@ public class JaxAtsTask extends JaxAtsObject { private String relatedToState; private String taskWorkDef; List<JaxAttribute> attributes; + List<JaxRelation> relations; public JaxAtsTask() { attributes = new ArrayList<>(); @@ -101,4 +104,29 @@ public class JaxAtsTask extends JaxAtsObject { attributes.add(attr); } + public void addAttribute(IAttributeType attrType, String value) { + addAttribute(attrType.getName(), value); + } + + public void addRelation(IRelationTypeSide relationSide, long... relatedUuid) { + JaxRelation relation = new JaxRelation(); + relation.setRelationTypeName(relationSide.getName()); + relation.setSideA(relationSide.getSide().isSideA()); + for (long relationUuid : relatedUuid) { + relation.getRelatedUuids().add(relationUuid); + } + relations.add(relation); + } + + public List<JaxRelation> getRelations() { + if (relations == null) { + relations = new LinkedList<>(); + } + return relations; + } + + public void setRelations(List<JaxRelation> relations) { + this.relations = relations; + } + } diff --git a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/task/JaxAtsTaskFactory.java b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/task/JaxAtsTaskFactory.java new file mode 100644 index 00000000000..ce51e260d87 --- /dev/null +++ b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/task/JaxAtsTaskFactory.java @@ -0,0 +1,38 @@ +/******************************************************************************* + * 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.api.task; + +import java.util.Date; +import org.eclipse.osee.ats.api.user.IAtsUser; + +/** + * @author Donald G. Dunne + */ +public class JaxAtsTaskFactory { + + private JaxAtsTaskFactory() { + // utility class + } + + public static JaxAtsTask get(String title, IAtsUser createdBy, Date createdDate) { + JaxAtsTask task = new JaxAtsTask(); + task.setCreatedByUserId(createdBy.getUserId()); + task.setCreatedDate(createdDate); + task.setName(title); + return task; + } + + public static JaxAtsTask get(NewTaskData newTaskData, String title, IAtsUser createdBy, Date createdDate) { + JaxAtsTask task = get(title, createdBy, createdDate); + newTaskData.getNewTasks().add(task); + return task; + } +} diff --git a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/task/JaxRelation.java b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/task/JaxRelation.java new file mode 100644 index 00000000000..3292bf0697e --- /dev/null +++ b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/task/JaxRelation.java @@ -0,0 +1,55 @@ +/******************************************************************************* + * 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.api.task; + +import java.util.List; +import javax.xml.bind.annotation.XmlRootElement; + +/** + * @author Donald G. Dunne + */ +@XmlRootElement +public class JaxRelation { + + private String relationTypeName; + private boolean sideA; + private List<Long> relatedUuids; + + public String getRelationTypeName() { + return relationTypeName; + } + + public void setRelationTypeName(String relationTypeName) { + this.relationTypeName = relationTypeName; + } + + public boolean isSideA() { + return sideA; + } + + public void setSideA(boolean sideA) { + this.sideA = sideA; + } + + public List<Long> getRelatedUuids() { + return relatedUuids; + } + + public void setRelatedUuids(List<Long> relatedUuids) { + this.relatedUuids = relatedUuids; + } + + @Override + public String toString() { + return "JaxRelation [type=" + relationTypeName + ", sideA=" + sideA + ", relatedUuids=" + relatedUuids + "]"; + } + +} diff --git a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/task/NewTaskData.java b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/task/NewTaskData.java index ba6beda8e79..d8b762c569a 100644 --- a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/task/NewTaskData.java +++ b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/task/NewTaskData.java @@ -25,9 +25,6 @@ public class NewTaskData { String asUserId; String commitComment; - public NewTaskData() { - } - public Long getTeamWfUuid() { return teamWfUuid; } @@ -63,4 +60,9 @@ public class NewTaskData { this.asUserId = asUserId; } + @Override + public String toString() { + return "NewTaskData [teamUuid=" + teamWfUuid + ", tasks=" + newTasks + ", asUserId=" + asUserId + ", commitComment=" + commitComment + "]"; + } + } diff --git a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/task/NewTaskDataFactory.java b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/task/NewTaskDataFactory.java new file mode 100644 index 00000000000..b9b77a4f6d1 --- /dev/null +++ b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/task/NewTaskDataFactory.java @@ -0,0 +1,40 @@ +/******************************************************************************* + * 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.api.task; + +import org.eclipse.osee.ats.api.user.IAtsUser; +import org.eclipse.osee.ats.api.workflow.IAtsTeamWorkflow; + +/** + * @author Donald G. Dunne + */ +public class NewTaskDataFactory { + + private NewTaskDataFactory() { + // utility class + } + + public static NewTaskData get(String comment, String asUserId, Long teamWfUuid) { + NewTaskData newTaskData = new NewTaskData(); + newTaskData.setAsUserId(asUserId); + newTaskData.setCommitComment(comment); + newTaskData.setTeamWfUuid(teamWfUuid); + return newTaskData; + } + + public static NewTaskData get(String comment, IAtsUser atsUser, IAtsTeamWorkflow teamWf) { + NewTaskData newTaskData = new NewTaskData(); + newTaskData.setAsUserId(atsUser.getUserId()); + newTaskData.setCommitComment(comment); + newTaskData.setTeamWfUuid(teamWf.getUuid()); + return newTaskData; + } +} diff --git a/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/task/NewTaskDatas.java b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/task/NewTaskDatas.java new file mode 100644 index 00000000000..fe5e1d278d3 --- /dev/null +++ b/plugins/org.eclipse.osee.ats.api/src/org/eclipse/osee/ats/api/task/NewTaskDatas.java @@ -0,0 +1,50 @@ +/******************************************************************************* + * 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.api.task; + +import java.util.LinkedList; +import java.util.List; +import javax.xml.bind.annotation.XmlRootElement; + +/** + * @author Donald G. Dunne + */ +@XmlRootElement +public class NewTaskDatas { + + private List<NewTaskData> taskDatas = new LinkedList<>(); + + public NewTaskDatas() { + // for jax-rs instantiation + } + + public NewTaskDatas(NewTaskData newTaskData) { + taskDatas.add(newTaskData); + } + + public List<NewTaskData> getTaskDatas() { + return taskDatas; + } + + public void setTaskDatas(List<NewTaskData> taskDatas) { + this.taskDatas = taskDatas; + } + + public void add(NewTaskData newTaskData) { + taskDatas.add(newTaskData); + } + + @Override + public String toString() { + return "NewTaskDatas [datas=" + taskDatas + "]"; + } + +} diff --git a/plugins/org.eclipse.osee.ats.client.demo/src/org/eclipse/osee/ats/client/demo/config/DemoDbTasks.java b/plugins/org.eclipse.osee.ats.client.demo/src/org/eclipse/osee/ats/client/demo/config/DemoDbTasks.java index 2beffc26454..70c28fbbfb2 100644 --- a/plugins/org.eclipse.osee.ats.client.demo/src/org/eclipse/osee/ats/client/demo/config/DemoDbTasks.java +++ b/plugins/org.eclipse.osee.ats.client.demo/src/org/eclipse/osee/ats/client/demo/config/DemoDbTasks.java @@ -16,12 +16,16 @@ import java.util.Collection; import java.util.Date; import java.util.List; import java.util.logging.Level; +import org.eclipse.osee.ats.api.task.JaxAtsTask; +import org.eclipse.osee.ats.api.task.JaxAtsTaskFactory; +import org.eclipse.osee.ats.api.task.NewTaskData; +import org.eclipse.osee.ats.api.task.NewTaskDataFactory; +import org.eclipse.osee.ats.api.task.NewTaskDatas; import org.eclipse.osee.ats.api.user.IAtsUser; import org.eclipse.osee.ats.client.demo.DemoUsers; import org.eclipse.osee.ats.client.demo.internal.Activator; import org.eclipse.osee.ats.client.demo.internal.AtsClientService; import org.eclipse.osee.ats.core.client.team.TeamWorkFlowArtifact; -import org.eclipse.osee.ats.core.client.util.AtsChangeSet; import org.eclipse.osee.framework.logging.OseeLog; /** @@ -35,26 +39,26 @@ public class DemoDbTasks { } Date createdDate = new Date(); IAtsUser createdBy = AtsClientService.get().getUserService().getCurrentUser(); - AtsChangeSet changes = new AtsChangeSet("Populate Demo DB - Create Tasks"); boolean firstTaskWorkflow = true; + NewTaskDatas newTaskDatas = new NewTaskDatas(); for (TeamWorkFlowArtifact codeArt : DemoDbUtil.getSampleCodeWorkflows()) { - List<IAtsUser> demoUsers = new ArrayList<>(); + NewTaskData newTaskData = NewTaskDataFactory.get("Populate Demo DB - Create Tasks", createdBy, codeArt); + List<String> assigneeUserIds = new ArrayList<>(); if (firstTaskWorkflow) { - demoUsers.add(AtsClientService.get().getUserServiceClient().getUserFromOseeUser( - DemoDbUtil.getDemoUser(DemoUsers.Joe_Smith))); - demoUsers.add(AtsClientService.get().getUserServiceClient().getUserFromOseeUser( - DemoDbUtil.getDemoUser(DemoUsers.Kay_Jones))); + assigneeUserIds.add(DemoDbUtil.getDemoUser(DemoUsers.Joe_Smith).getUserId()); + assigneeUserIds.add(DemoDbUtil.getDemoUser(DemoUsers.Kay_Jones).getUserId()); } else { - demoUsers.add(AtsClientService.get().getUserServiceClient().getUserFromOseeUser( - DemoDbUtil.getDemoUser(DemoUsers.Joe_Smith))); + assigneeUserIds.add(DemoDbUtil.getDemoUser(DemoUsers.Joe_Smith).getUserId()); } for (String title : getTaskTitles(firstTaskWorkflow)) { - codeArt.createNewTask(demoUsers, title, createdDate, createdBy, codeArt.getCurrentStateName(), changes); + JaxAtsTask task = JaxAtsTaskFactory.get(newTaskData, title, createdBy, createdDate); + task.setRelatedToState(codeArt.getCurrentStateName()); + task.setAssigneeUserIds(assigneeUserIds); } firstTaskWorkflow = false; - changes.add(codeArt); + newTaskDatas.add(newTaskData); } - changes.execute(); + AtsClientService.get().getTaskService().createTasks(newTaskDatas); } /** diff --git a/plugins/org.eclipse.osee.ats.client.demo/src/org/eclipse/osee/ats/client/demo/navigate/CreateGoalTestDemoArtifacts.java b/plugins/org.eclipse.osee.ats.client.demo/src/org/eclipse/osee/ats/client/demo/navigate/CreateGoalTestDemoArtifacts.java index fb4844df1e6..cd264e6d0f8 100644 --- a/plugins/org.eclipse.osee.ats.client.demo/src/org/eclipse/osee/ats/client/demo/navigate/CreateGoalTestDemoArtifacts.java +++ b/plugins/org.eclipse.osee.ats.client.demo/src/org/eclipse/osee/ats/client/demo/navigate/CreateGoalTestDemoArtifacts.java @@ -11,12 +11,19 @@ package org.eclipse.osee.ats.client.demo.navigate; import java.util.Arrays; +import java.util.Collection; import java.util.Date; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.osee.ats.AtsImage; +import org.eclipse.osee.ats.api.data.AtsRelationTypes; +import org.eclipse.osee.ats.api.task.JaxAtsTaskFactory; +import org.eclipse.osee.ats.api.task.NewTaskData; +import org.eclipse.osee.ats.api.task.NewTaskDataFactory; +import org.eclipse.osee.ats.api.task.NewTaskDatas; import org.eclipse.osee.ats.api.team.ChangeType; import org.eclipse.osee.ats.api.user.IAtsUser; import org.eclipse.osee.ats.api.util.IAtsChangeSet; +import org.eclipse.osee.ats.api.workflow.IAtsTask; import org.eclipse.osee.ats.artifact.GoalManager; import org.eclipse.osee.ats.client.demo.internal.AtsClientService; import org.eclipse.osee.ats.core.client.action.ActionArtifact; @@ -24,7 +31,6 @@ import org.eclipse.osee.ats.core.client.action.ActionManager; import org.eclipse.osee.ats.core.client.artifact.GoalArtifact; import org.eclipse.osee.ats.core.client.review.PeerToPeerReviewArtifact; import org.eclipse.osee.ats.core.client.review.PeerToPeerReviewManager; -import org.eclipse.osee.ats.core.client.task.TaskArtifact; import org.eclipse.osee.ats.core.client.team.TeamWorkFlowArtifact; import org.eclipse.osee.ats.core.client.util.AtsChangeSet; import org.eclipse.osee.ats.core.config.ActionableItems; @@ -71,21 +77,32 @@ public class CreateGoalTestDemoArtifacts extends XNavigateItemAction { TeamWorkFlowArtifact teamArt = createAction1(changes, sawCodeGoal); createAction2(changes, sawCodeGoal, cisReqGoal); createAction3(changes, sawTestGoal, cisReqGoal); - teamArt = createAction456(changes, sawCodeGoal, facilitiesGoal, teamArt); createAction7(changes, facilitiesGoal); + changes.execute(); + + teamArt = createAction456(sawCodeGoal, facilitiesGoal, teamArt); + + NewTaskData newTaskData = NewTaskDataFactory.get(getName(), createdBy, teamArt); for (String name : Arrays.asList("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "AA", "BB", "CC", "DD", "EE", "FF", "GG", "HH", "II", "JJ", "KK", "LL", "MM", "NN", "OO", "PP", "QQ", "RR")) { - TaskArtifact taskArt = teamArt.createNewTask("Task " + name, createdDate, createdBy, changes); - toolsTeamGoal.addMember(taskArt); - changes.add(taskArt); + JaxAtsTaskFactory.get(newTaskData, "Task " + name, createdBy, createdDate); } - changes.add(toolsTeamGoal); + Collection<IAtsTask> createTasks = + AtsClientService.get().getTaskService().createTasks(new NewTaskDatas(newTaskData)); + + changes = new AtsChangeSet(getName()); + for (IAtsTask task : createTasks) { + Artifact taskArt = AtsClientService.get().getArtifact(task); + toolsTeamGoal.addMember(taskArt); + changes.setRelation(toolsTeamGoal, AtsRelationTypes.Goal_Member, taskArt); + } changes.execute(); - WorldEditor.open(new WorldEditorSimpleProvider("Goals", Arrays.asList(sawCodeGoal, sawTestGoal, toolsTeamGoal, - facilitiesGoal, cisReqGoal))); + + WorldEditor.open(new WorldEditorSimpleProvider("Goals", + Arrays.asList(sawCodeGoal, sawTestGoal, toolsTeamGoal, facilitiesGoal, cisReqGoal))); } @@ -98,30 +115,42 @@ public class CreateGoalTestDemoArtifacts extends XNavigateItemAction { changes.add(facilitiesGoal); } - private TeamWorkFlowArtifact createAction456(IAtsChangeSet changes, GoalArtifact sawCodeGoal, GoalArtifact facilitiesGoal, TeamWorkFlowArtifact teamArt) throws OseeCoreException { + private TeamWorkFlowArtifact createAction456(GoalArtifact sawCodeGoal, GoalArtifact facilitiesGoal, TeamWorkFlowArtifact teamArt) throws OseeCoreException { + AtsChangeSet changes = new AtsChangeSet(getName()); + NewTaskDatas newTaskDatas = new NewTaskDatas(); for (String msaTool : Arrays.asList("Backups", "Computers", "Network")) { - Artifact action = - ActionManager.createAction(null, "Fix " + msaTool + " button", "Description", ChangeType.Problem, "4", - false, null, - ActionableItems.getActionableItems(Arrays.asList(msaTool), AtsClientService.get().getConfig()), - createdDate, createdBy, null, changes); + Artifact action = ActionManager.createAction(null, "Fix " + msaTool + " button", "Description", + ChangeType.Problem, "4", false, null, + ActionableItems.getActionableItems(Arrays.asList(msaTool), AtsClientService.get().getConfig()), createdDate, + createdBy, null, changes); facilitiesGoal.addMember(ActionManager.getFirstTeam(action)); teamArt = ActionManager.getFirstTeam(action); - TaskArtifact taskArt = teamArt.createNewTask("Task 1", createdDate, createdBy, changes); - sawCodeGoal.addMember(taskArt); - changes.add(taskArt); - taskArt = teamArt.createNewTask("Task 2", createdDate, createdBy, changes); - facilitiesGoal.addMember(taskArt); - changes.add(taskArt); + NewTaskData newTaskData = NewTaskDataFactory.get("createAction456", createdBy, teamArt); + newTaskDatas.add(newTaskData); + JaxAtsTaskFactory.get(newTaskData, "Task 1", createdBy, createdDate); + JaxAtsTaskFactory.get(newTaskData, "Task 2", createdBy, createdDate); + } + changes.add(facilitiesGoal); + changes.add(sawCodeGoal); + changes.execute(); + + Collection<IAtsTask> createTasks = AtsClientService.get().getTaskService().createTasks(newTaskDatas); + + changes = new AtsChangeSet(getName()); + for (IAtsTask task : createTasks) { + facilitiesGoal.addMember((Artifact) task.getStoreObject()); + sawCodeGoal.addMember((Artifact) task.getStoreObject()); } + changes.execute(); + return teamArt; } private void createAction3(IAtsChangeSet changes, GoalArtifact sawCodeGoal, GoalArtifact cisReqGoal) throws OseeCoreException { - Artifact action = - ActionManager.createAction(null, "Remove Workflow button", "Description", ChangeType.Problem, "4", false, - null, ActionableItems.getActionableItems(Arrays.asList("SAW Code", "CIS Requirements"), - AtsClientService.get().getConfig()), createdDate, createdBy, null, changes); + Artifact action = ActionManager.createAction(null, "Remove Workflow button", "Description", ChangeType.Problem, + "4", false, null, ActionableItems.getActionableItems(Arrays.asList("SAW Code", "CIS Requirements"), + AtsClientService.get().getConfig()), + createdDate, createdBy, null, changes); sawCodeGoal.addMember(ActionManager.getFirstTeam(action)); cisReqGoal.addMember(ActionManager.getFirstTeam(action)); } @@ -130,16 +159,16 @@ public class CreateGoalTestDemoArtifacts extends XNavigateItemAction { ActionArtifact action = ActionManager.createAction(null, "Add CDB Check Signals", "Description", ChangeType.Problem, "4", false, null, ActionableItems.getActionableItems(Arrays.asList("SAW Code", "CIS Requirements"), - AtsClientService.get().getConfig()), createdDate, createdBy, null, changes); + AtsClientService.get().getConfig()), + createdDate, createdBy, null, changes); sawCodeGoal.addMember(ActionManager.getFirstTeam(action)); cisReqGoal.addMember(ActionManager.getFirstTeam(action)); } private TeamWorkFlowArtifact createAction1(IAtsChangeSet changes, GoalArtifact sawCodeGoal) throws OseeCoreException { - Artifact action = - ActionManager.createAction(null, "Fix this model", "Description", ChangeType.Problem, "2", false, null, - ActionableItems.getActionableItems(Arrays.asList("SAW Code"), AtsClientService.get().getConfig()), - createdDate, createdBy, null, changes); + Artifact action = ActionManager.createAction(null, "Fix this model", "Description", ChangeType.Problem, "2", + false, null, ActionableItems.getActionableItems(Arrays.asList("SAW Code"), AtsClientService.get().getConfig()), + createdDate, createdBy, null, changes); sawCodeGoal.addMember(ActionManager.getFirstTeam(action)); TeamWorkFlowArtifact teamArt = ActionManager.getFirstTeam(action); PeerToPeerReviewArtifact peerReviewArt = diff --git a/plugins/org.eclipse.osee.ats.client.integration.tests/AtsClient_Integration_TestSuite.launch b/plugins/org.eclipse.osee.ats.client.integration.tests/AtsClient_Integration_TestSuite.launch index d49847bd5e1..6e92c52ac8f 100644 --- a/plugins/org.eclipse.osee.ats.client.integration.tests/AtsClient_Integration_TestSuite.launch +++ b/plugins/org.eclipse.osee.ats.client.integration.tests/AtsClient_Integration_TestSuite.launch @@ -4,6 +4,7 @@ <setEntry value="org.eclipse.osee.ats.client.integration.tests:0.23.0.qualifier:default:true"/> <setEntry value="org.eclipse.osee.client.integration.tests:0.23.0.qualifier:default:true"/> <setEntry value="org.eclipse.osee.client.test.framework:0.23.0.qualifier:default:true"/> +<setEntry value="org.hamcrest.core:1.3.0.v201303031735:default:true"/> </setAttribute> <booleanAttribute key="append.args" value="true"/> <booleanAttribute key="askclear" value="false"/> diff --git a/plugins/org.eclipse.osee.ats.client.integration.tests/META-INF/MANIFEST.MF b/plugins/org.eclipse.osee.ats.client.integration.tests/META-INF/MANIFEST.MF index 61d0ee6e669..d5b3cc7d707 100644 --- a/plugins/org.eclipse.osee.ats.client.integration.tests/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.osee.ats.client.integration.tests/META-INF/MANIFEST.MF @@ -89,6 +89,7 @@ Import-Package: com.google.common.collect, org.eclipse.osee.framework.jdk.core.type, org.eclipse.osee.framework.jdk.core.util, org.eclipse.osee.framework.logging, + org.eclipse.osee.framework.plugin.core, org.eclipse.osee.framework.plugin.core.util, org.eclipse.osee.framework.skynet.core, org.eclipse.osee.framework.skynet.core.artifact, diff --git a/plugins/org.eclipse.osee.ats.client.integration.tests/OSEE-INF/support/WorkDef_Team_DecisionReviewDefinitionManagerTest_Prepare.ats b/plugins/org.eclipse.osee.ats.client.integration.tests/OSEE-INF/support/WorkDef_Team_DecisionReviewDefinitionManagerTest_Prepare.ats new file mode 100644 index 00000000000..594bf0db296 --- /dev/null +++ b/plugins/org.eclipse.osee.ats.client.integration.tests/OSEE-INF/support/WorkDef_Team_DecisionReviewDefinitionManagerTest_Prepare.ats @@ -0,0 +1,44 @@ +workDefinition "WorkDef_Team_AtsTestUtil" { + id "WorkDef_Team_AtsTestUtil" + startState "Analyze" + + decisionReviewDefinition "Create New on Implement" { + title "This is the title" + description "the description" + relatedToState "Implement" + blockingType Commit + onEvent TransitionTo + option "Yes" followup by assignee userId "3333" + option "No" + } + + state "Analyze" { + type Working + ordinal 1 + to "Implement" AsDefault + to "Completed" + to "Cancelled" OverrideAttributeValidation + } + + state "Implement" { + type Working + ordinal 2 + to "Analyze" OverrideAttributeValidation + to "Completed" AsDefault + to "Cancelled" OverrideAttributeValidation + decisionReview "Create New on Implement" + } + + state "Completed" { + type Completed + ordinal 3 + to "Implement" OverrideAttributeValidation + } + + state "Cancelled" { + type Cancelled + ordinal 4 + to "Analyze" OverrideAttributeValidation + to "Implement" OverrideAttributeValidation + } +} diff --git a/plugins/org.eclipse.osee.ats.client.integration.tests/OSEE-INF/support/WorkDef_Team_DecisionReviewDefinitionManagerTest_toDecision.ats b/plugins/org.eclipse.osee.ats.client.integration.tests/OSEE-INF/support/WorkDef_Team_DecisionReviewDefinitionManagerTest_toDecision.ats new file mode 100644 index 00000000000..a53f6361193 --- /dev/null +++ b/plugins/org.eclipse.osee.ats.client.integration.tests/OSEE-INF/support/WorkDef_Team_DecisionReviewDefinitionManagerTest_toDecision.ats @@ -0,0 +1,46 @@ +workDefinition "WorkDef_Team_AtsTestUtil" { + id "WorkDef_Team_AtsTestUtil" + startState "Analyze" + + decisionReviewDefinition "Create New on Implement" { + title "This is my review title" + description "the description" + relatedToState "Implement" + blockingType Transition + onEvent TransitionTo + assignee named "UnAssigned" + autoTransitionToDecision True + option "Yes" followup by assignee userId "3333" + option "No" + } + + state "Analyze" { + type Working + ordinal 1 + to "Implement" AsDefault + to "Completed" + to "Cancelled" OverrideAttributeValidation + } + + state "Implement" { + type Working + ordinal 2 + to "Analyze" OverrideAttributeValidation + to "Completed" AsDefault + to "Cancelled" OverrideAttributeValidation + decisionReview "Create New on Implement" + } + + state "Completed" { + type Completed + ordinal 3 + to "Implement" OverrideAttributeValidation + } + + state "Cancelled" { + type Cancelled + ordinal 4 + to "Analyze" OverrideAttributeValidation + to "Implement" OverrideAttributeValidation + } +} diff --git a/plugins/org.eclipse.osee.ats.client.integration.tests/OSEE-INF/support/WorkDef_Team_PeerReviewDefinitionManagerTest_Transition.ats b/plugins/org.eclipse.osee.ats.client.integration.tests/OSEE-INF/support/WorkDef_Team_PeerReviewDefinitionManagerTest_Transition.ats new file mode 100644 index 00000000000..35daa263f4c --- /dev/null +++ b/plugins/org.eclipse.osee.ats.client.integration.tests/OSEE-INF/support/WorkDef_Team_PeerReviewDefinitionManagerTest_Transition.ats @@ -0,0 +1,43 @@ +workDefinition "WorkDef_Team_AtsTestUtil" { + id "WorkDef_Team_AtsTestUtil" + startState "Analyze" + + peerReviewDefinition "Create New on Implement" { + title "This is my review title" + description "the description" + relatedToState "Implement" + blockingType Transition + onEvent TransitionTo + assignee named "UnAssigned" + } + + state "Analyze" { + type Working + ordinal 1 + to "Implement" AsDefault + to "Completed" + to "Cancelled" OverrideAttributeValidation + } + + state "Implement" { + type Working + ordinal 2 + to "Analyze" OverrideAttributeValidation + to "Completed" AsDefault + to "Cancelled" OverrideAttributeValidation + peerReview "Create New on Implement" + } + + state "Completed" { + type Completed + ordinal 3 + to "Implement" OverrideAttributeValidation + } + + state "Cancelled" { + type Cancelled + ordinal 4 + to "Analyze" OverrideAttributeValidation + to "Implement" OverrideAttributeValidation + } +} diff --git a/plugins/org.eclipse.osee.ats.client.integration.tests/OSEE-INF/support/WorkDef_Team_TransitionManagerTest_TargetedVersion.ats b/plugins/org.eclipse.osee.ats.client.integration.tests/OSEE-INF/support/WorkDef_Team_TransitionManagerTest_TargetedVersion.ats new file mode 100644 index 00000000000..d269de660a4 --- /dev/null +++ b/plugins/org.eclipse.osee.ats.client.integration.tests/OSEE-INF/support/WorkDef_Team_TransitionManagerTest_TargetedVersion.ats @@ -0,0 +1,75 @@ +workDefinition "WorkDef_Team_AtsTestUtil" { + id "WorkDef_Team_AtsTestUtil" + startState "Analyze" + + widgetDefinition "Estimated Hours" { + attributeName "ats.Estimated Hours" + xWidgetName "XFloatDam" + } + + widgetDefinition "Work Package" { + attributeName "ats.Work Package" + xWidgetName "XTextDam" + } + + widgetDefinition "Title" { + attributeName "Name" + xWidgetName "XTextDam" + option REQUIRED_FOR_TRANSITION + } + + widgetDefinition "Description" { + attributeName "ats.Description" + xWidgetName "XTextDam" + option REQUIRED_FOR_TRANSITION + option FILL_VERTICALLY + } + + state "Analyze" { + type Working + ordinal 1 + to "Implement" AsDefault + to "Completed" + to "Cancelled" OverrideAttributeValidation + rule RequireTargetedVersion + layout { + widget "Title" + widget "Description" + composite { + numColumns 4 + widget "Estimated Hours" + widget "Work Package" + } + } + } + + state "Implement" { + type Working + ordinal 2 + to "Analyze" OverrideAttributeValidation + to "Completed" AsDefault + to "Cancelled" OverrideAttributeValidation + layout { + widget "Title" + widget "Description" + composite { + numColumns 4 + widget "Estimated Hours" + widget "Work Package" + } + } + } + + state "Completed" { + type Completed + ordinal 3 + to "Implement" OverrideAttributeValidation + } + + state "Cancelled" { + type Cancelled + ordinal 4 + to "Analyze" OverrideAttributeValidation + to "Implement" OverrideAttributeValidation + } +} diff --git a/plugins/org.eclipse.osee.ats.client.integration.tests/OSEE-INF/support/WorkDef_Team_TransitionManagerTest_WidgetRequiredCompletion.ats b/plugins/org.eclipse.osee.ats.client.integration.tests/OSEE-INF/support/WorkDef_Team_TransitionManagerTest_WidgetRequiredCompletion.ats new file mode 100644 index 00000000000..8544c599281 --- /dev/null +++ b/plugins/org.eclipse.osee.ats.client.integration.tests/OSEE-INF/support/WorkDef_Team_TransitionManagerTest_WidgetRequiredCompletion.ats @@ -0,0 +1,76 @@ +workDefinition "WorkDef_Team_AtsTestUtil" { + id "WorkDef_Team_AtsTestUtil" + startState "Analyze" + + widgetDefinition "Estimated Hours" { + attributeName "ats.Estimated Hours" + xWidgetName "XFloatDam" + option REQUIRED_FOR_COMPLETION + } + + widgetDefinition "Work Package" { + attributeName "ats.Work Package" + xWidgetName "XTextDam" + option REQUIRED_FOR_COMPLETION + } + + widgetDefinition "Title" { + attributeName "Name" + xWidgetName "XTextDam" + option REQUIRED_FOR_TRANSITION + } + + widgetDefinition "Description" { + attributeName "ats.Description" + xWidgetName "XTextDam" + option REQUIRED_FOR_TRANSITION + option FILL_VERTICALLY + } + + state "Analyze" { + type Working + ordinal 1 + to "Implement" AsDefault + to "Completed" + to "Cancelled" OverrideAttributeValidation + layout { + widget "Title" + widget "Description" + composite { + numColumns 4 + widget "Estimated Hours" + widget "Work Package" + } + } + } + + state "Implement" { + type Working + ordinal 2 + to "Analyze" OverrideAttributeValidation + to "Completed" AsDefault + to "Cancelled" OverrideAttributeValidation + layout { + widget "Title" + widget "Description" + composite { + numColumns 4 + widget "Estimated Hours" + widget "Work Package" + } + } + } + + state "Completed" { + type Completed + ordinal 3 + to "Implement" OverrideAttributeValidation + } + + state "Cancelled" { + type Cancelled + ordinal 4 + to "Analyze" OverrideAttributeValidation + to "Implement" OverrideAttributeValidation + } +} diff --git a/plugins/org.eclipse.osee.ats.client.integration.tests/OSEE-INF/support/WorkDef_Team_TransitionManagerTest_WidgetRequiredTransition.ats b/plugins/org.eclipse.osee.ats.client.integration.tests/OSEE-INF/support/WorkDef_Team_TransitionManagerTest_WidgetRequiredTransition.ats new file mode 100644 index 00000000000..4883a49615d --- /dev/null +++ b/plugins/org.eclipse.osee.ats.client.integration.tests/OSEE-INF/support/WorkDef_Team_TransitionManagerTest_WidgetRequiredTransition.ats @@ -0,0 +1,76 @@ +workDefinition "WorkDef_Team_AtsTestUtil" { + id "WorkDef_Team_AtsTestUtil" + startState "Analyze" + + widgetDefinition "Estimated Hours" { + attributeName "ats.Estimated Hours" + xWidgetName "XFloatDam" + option REQUIRED_FOR_TRANSITION + } + + widgetDefinition "Work Package" { + attributeName "ats.Work Package" + xWidgetName "XTextDam" + option REQUIRED_FOR_TRANSITION + } + + widgetDefinition "Title" { + attributeName "Name" + xWidgetName "XTextDam" + option REQUIRED_FOR_TRANSITION + } + + widgetDefinition "Description" { + attributeName "ats.Description" + xWidgetName "XTextDam" + option REQUIRED_FOR_TRANSITION + option FILL_VERTICALLY + } + + state "Analyze" { + type Working + ordinal 1 + to "Implement" AsDefault + to "Completed" + to "Cancelled" OverrideAttributeValidation + layout { + widget "Title" + widget "Description" + composite { + numColumns 4 + widget "Estimated Hours" + widget "Work Package" + } + } + } + + state "Implement" { + type Working + ordinal 2 + to "Analyze" OverrideAttributeValidation + to "Completed" AsDefault + to "Cancelled" OverrideAttributeValidation + layout { + widget "Title" + widget "Description" + composite { + numColumns 4 + widget "Estimated Hours" + widget "Work Package" + } + } + } + + state "Completed" { + type Completed + ordinal 3 + to "Implement" OverrideAttributeValidation + } + + state "Cancelled" { + type Cancelled + ordinal 4 + to "Analyze" OverrideAttributeValidation + to "Implement" OverrideAttributeValidation + } +} diff --git a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/actions/OpenInAtsWorldActionTest2.java b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/actions/OpenInAtsWorldActionTest2.java index 950d9b5e63f..442d39f23af 100644 --- a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/actions/OpenInAtsWorldActionTest2.java +++ b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/actions/OpenInAtsWorldActionTest2.java @@ -23,7 +23,7 @@ public class OpenInAtsWorldActionTest2 extends AbstractAtsActionRunTest { @Override public OpenInAtsWorldAction createAction() throws OseeCoreException { AtsChangeSet changes = new AtsChangeSet(getClass().getSimpleName()); - OpenInAtsWorldAction action = new OpenInAtsWorldAction(AtsTestUtil.getOrCreateTaskOffTeamWf1(changes)); + OpenInAtsWorldAction action = new OpenInAtsWorldAction(AtsTestUtil.getOrCreateTaskOffTeamWf1()); if (!changes.isEmpty()) { changes.execute(); } diff --git a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/actions/OpenNewAtsTaskEditorActionTest.java b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/actions/OpenNewAtsTaskEditorActionTest.java index 538e285617a..7d8aa6223d8 100644 --- a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/actions/OpenNewAtsTaskEditorActionTest.java +++ b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/actions/OpenNewAtsTaskEditorActionTest.java @@ -12,14 +12,11 @@ package org.eclipse.osee.ats.client.integration.tests.ats.actions; import java.util.Collection; import java.util.Collections; -import java.util.Set; import org.eclipse.jface.action.Action; import org.eclipse.nebula.widgets.xviewer.customize.CustomizeData; import org.eclipse.osee.ats.actions.OpenNewAtsTaskEditorAction; import org.eclipse.osee.ats.actions.OpenNewAtsTaskEditorAction.IOpenNewAtsTaskEditorHandler; import org.eclipse.osee.ats.client.integration.tests.ats.core.client.AtsTestUtil; -import org.eclipse.osee.ats.core.client.task.TaskArtifact; -import org.eclipse.osee.ats.core.client.util.AtsChangeSet; import org.eclipse.osee.ats.task.ITaskEditorProvider; import org.eclipse.osee.ats.world.search.WorldSearchItem.SearchType; import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; @@ -51,10 +48,7 @@ public class OpenNewAtsTaskEditorActionTest extends AbstractAtsActionRunTest { @Override public Collection<? extends Artifact> getTaskEditorTaskArtifacts() throws OseeCoreException { - AtsChangeSet changes = new AtsChangeSet(OpenNewAtsTaskEditorActionTest.class.getName()); - Set<TaskArtifact> arts = Collections.singleton(AtsTestUtil.getOrCreateTaskOffTeamWf1(changes)); - changes.execute(); - return arts; + return Collections.singleton(AtsTestUtil.getOrCreateTaskOffTeamWf1()); } @Override diff --git a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/actions/OpenParentActionTest.java b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/actions/OpenParentActionTest.java index 9e7c9f2e6f9..d2ecea8b69c 100644 --- a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/actions/OpenParentActionTest.java +++ b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/actions/OpenParentActionTest.java @@ -23,7 +23,7 @@ public class OpenParentActionTest extends AbstractAtsActionRunTest { @Override public OpenParentAction createAction() throws OseeCoreException { AtsChangeSet changes = new AtsChangeSet(getClass().getSimpleName()); - OpenParentAction action = new OpenParentAction(AtsTestUtil.getOrCreateTaskOffTeamWf1(changes)); + OpenParentAction action = new OpenParentAction(AtsTestUtil.getOrCreateTaskOffTeamWf1()); if (!changes.isEmpty()) { changes.execute(); } diff --git a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/column/EstimatedHoursColumnTest.java b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/column/EstimatedHoursColumnTest.java index a35bb42cc09..296becc8eb7 100644 --- a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/column/EstimatedHoursColumnTest.java +++ b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/column/EstimatedHoursColumnTest.java @@ -10,14 +10,16 @@ *******************************************************************************/ package org.eclipse.osee.ats.client.integration.tests.ats.column; +import java.util.Arrays; +import java.util.Collection; import java.util.Date; import org.eclipse.osee.ats.api.data.AtsAttributeTypes; +import org.eclipse.osee.ats.api.workflow.IAtsTask; import org.eclipse.osee.ats.client.integration.tests.AtsClientService; import org.eclipse.osee.ats.client.integration.tests.ats.core.client.AtsTestUtil; import org.eclipse.osee.ats.client.integration.tests.util.DemoTestUtil; import org.eclipse.osee.ats.core.client.review.PeerToPeerReviewArtifact; import org.eclipse.osee.ats.core.client.review.PeerToPeerReviewManager; -import org.eclipse.osee.ats.core.client.task.TaskArtifact; import org.eclipse.osee.ats.core.client.team.TeamWorkFlowArtifact; import org.eclipse.osee.ats.core.client.util.AtsChangeSet; import org.eclipse.osee.ats.core.client.workflow.EstimatedHoursUtil; @@ -51,20 +53,24 @@ public class EstimatedHoursColumnTest { Artifact actionArt = teamArt1.getParentActionArtifact(); TeamWorkFlowArtifact teamArt2 = DemoTestUtil.addTeamWorkflow(actionArt, EstimatedHoursColumnTest.class.getSimpleName(), changes); - TaskArtifact taskArt1 = - teamArt1.createNewTask(EstimatedHoursColumnTest.class.getSimpleName(), new Date(), - AtsClientService.get().getUserService().getCurrentUser(), changes); - changes.add(taskArt1); - TaskArtifact taskArt2 = - teamArt1.createNewTask(EstimatedHoursColumnTest.class.getSimpleName(), new Date(), - AtsClientService.get().getUserService().getCurrentUser(), changes); - changes.add(taskArt2); - PeerToPeerReviewArtifact peerArt = - PeerToPeerReviewManager.createNewPeerToPeerReview(teamArt1, getClass().getSimpleName(), - teamArt1.getStateMgr().getCurrentStateName(), changes); + PeerToPeerReviewArtifact peerArt = PeerToPeerReviewManager.createNewPeerToPeerReview(teamArt1, + getClass().getSimpleName(), teamArt1.getStateMgr().getCurrentStateName(), changes); changes.add(peerArt); changes.execute(); + Collection<IAtsTask> createTasks = AtsClientService.get().getTaskService().createTasks(teamArt1, + Arrays.asList(getClass().getSimpleName(), getClass().getSimpleName() + " 2"), null, new Date(), + AtsClientService.get().getUserService().getCurrentUser(), null, null, null, getClass().getSimpleName()); + + Artifact taskArt1 = null, taskArt2 = null; + for (IAtsTask task : createTasks) { + if (task.getName().endsWith("2")) { + taskArt2 = AtsClientService.get().getArtifact(task); + } else { + taskArt1 = AtsClientService.get().getArtifact(task); + } + } + Assert.assertEquals(0.0, EstimatedHoursUtil.getEstimatedHours(actionArt), 0); Assert.assertEquals(0.0, EstimatedHoursUtil.getEstimatedHours(teamArt1), 0); Assert.assertEquals(0.0, EstimatedHoursUtil.getEstimatedHours(teamArt2), 0); diff --git a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/AtsTestUtil.java b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/AtsTestUtil.java index ff86c6a4246..cce9864f9ed 100644 --- a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/AtsTestUtil.java +++ b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/AtsTestUtil.java @@ -20,6 +20,7 @@ import java.util.List; import java.util.Set; import org.eclipse.osee.ats.api.IAtsConfigObject; import org.eclipse.osee.ats.api.ai.IAtsActionableItem; +import org.eclipse.osee.ats.api.data.AtsArtifactTypes; import org.eclipse.osee.ats.api.data.AtsAttributeTypes; import org.eclipse.osee.ats.api.team.ChangeType; import org.eclipse.osee.ats.api.team.IAtsTeamDefinition; @@ -27,15 +28,20 @@ import org.eclipse.osee.ats.api.user.IAtsUser; import org.eclipse.osee.ats.api.util.IAtsChangeSet; import org.eclipse.osee.ats.api.version.IAtsVersion; import org.eclipse.osee.ats.api.workdef.IAtsDecisionReviewOption; +import org.eclipse.osee.ats.api.workdef.IAtsLayoutItem; +import org.eclipse.osee.ats.api.workdef.IAtsStateDefinition; import org.eclipse.osee.ats.api.workdef.IAtsWidgetDefinition; import org.eclipse.osee.ats.api.workdef.IAtsWorkDefinition; import org.eclipse.osee.ats.api.workdef.IStateToken; +import org.eclipse.osee.ats.api.workdef.JaxAtsWorkDef; import org.eclipse.osee.ats.api.workdef.ReviewBlockType; import org.eclipse.osee.ats.api.workdef.StateType; +import org.eclipse.osee.ats.api.workflow.IAtsTask; import org.eclipse.osee.ats.api.workflow.transition.IAtsTransitionManager; import org.eclipse.osee.ats.api.workflow.transition.TransitionOption; import org.eclipse.osee.ats.api.workflow.transition.TransitionResults; import org.eclipse.osee.ats.client.demo.DemoSawBuilds; +import org.eclipse.osee.ats.client.integration.AtsClientIntegrationTestSuite; import org.eclipse.osee.ats.client.integration.tests.AtsClientService; import org.eclipse.osee.ats.core.client.action.ActionArtifact; import org.eclipse.osee.ats.core.client.action.ActionManager; @@ -59,16 +65,15 @@ import org.eclipse.osee.ats.core.workflow.state.StateTypeAdapter; import org.eclipse.osee.ats.core.workflow.transition.TransitionFactory; import org.eclipse.osee.ats.core.workflow.transition.TransitionHelper; import org.eclipse.osee.ats.editor.SMAEditor; -import org.eclipse.osee.ats.mocks.MockStateDefinition; -import org.eclipse.osee.ats.mocks.MockWidgetDefinition; -import org.eclipse.osee.ats.mocks.MockWorkDefinition; import org.eclipse.osee.ats.task.TaskEditor; import org.eclipse.osee.ats.world.WorldEditor; import org.eclipse.osee.framework.core.enums.QueryOption; +import org.eclipse.osee.framework.core.exception.ArtifactDoesNotExist; import org.eclipse.osee.framework.core.exception.OseeWrappedException; import org.eclipse.osee.framework.core.model.Branch; import org.eclipse.osee.framework.core.operation.Operations; import org.eclipse.osee.framework.core.util.Result; +import org.eclipse.osee.framework.core.util.XResultData; 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.GUID; @@ -80,6 +85,7 @@ import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery; import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction; import org.eclipse.osee.framework.skynet.core.transaction.TransactionManager; import org.eclipse.osee.framework.skynet.core.utility.Artifacts; +import org.eclipse.osee.framework.ui.ws.AWorkspace; import org.eclipse.osee.support.test.util.TestUtil; /** @@ -90,7 +96,7 @@ import org.eclipse.osee.support.test.util.TestUtil; */ public class AtsTestUtil { - private static TeamWorkFlowArtifact teamArt = null, teamArt2 = null, teamArt3 = null, teamArt4 = null; + private static TeamWorkFlowArtifact teamWf = null, teamArt2 = null, teamArt3 = null, teamArt4 = null; private static IAtsTeamDefinition teamDef = null; private static IAtsVersion verArt1 = null, verArt2 = null, verArt3 = null, verArt4 = null; private static DecisionReviewArtifact decRevArt = null; @@ -98,10 +104,10 @@ public class AtsTestUtil { private static TaskArtifact taskArtWf1 = null, taskArtWf2 = null; private static IAtsActionableItem testAi = null, testAi2 = null, testAi3 = null, testAi4 = null; private static ActionArtifact actionArt = null, actionArt2 = null, actionArt3 = null, actionArt4 = null; - private static MockStateDefinition analyze, implement, completed, cancelled = null; - private static MockWorkDefinition workDef = null; + private static IAtsStateDefinition analyze, implement, completed, cancelled = null; + private static IAtsWorkDefinition workDef = null; public static String WORK_DEF_NAME = "WorkDef_Team_AtsTestUtil"; - private static MockWidgetDefinition estHoursWidgetDef, workPackageWidgetDef; + private static IAtsWidgetDefinition estHoursWidgetDef, workPackageWidgetDef; private static String postFixName; public static void validateArtifactCache() throws OseeStateException { @@ -117,7 +123,7 @@ public class AtsTestUtil { } public static void validateObjectsNull() throws OseeStateException { - validateObjectsNull("teamArt", teamArt); + validateObjectsNull("teamArt", teamWf); validateObjectsNull("teamArt2", teamArt2); validateObjectsNull("teamArt3", teamArt3); validateObjectsNull("teamArt4", teamArt4); @@ -158,33 +164,61 @@ public class AtsTestUtil { return workDef; } - public static MockStateDefinition getAnalyzeStateDef() throws OseeCoreException { + public static IAtsStateDefinition getAnalyzeStateDef() throws OseeCoreException { ensureLoaded(); + if (analyze == null) { + analyze = workDef.getStateByName("Analyze"); + } return analyze; } public static IAtsWidgetDefinition getEstHoursWidgetDef() throws OseeCoreException { ensureLoaded(); + if (estHoursWidgetDef == null) { + for (IAtsLayoutItem item : getAnalyzeStateDef().getLayoutItems()) { + if (item.getName().equals("ats.Estimated Hours")) { + estHoursWidgetDef = (IAtsWidgetDefinition) item; + break; + } + } + } return estHoursWidgetDef; } public static IAtsWidgetDefinition getWorkPackageWidgetDef() throws OseeCoreException { ensureLoaded(); + if (workPackageWidgetDef == null) { + for (IAtsLayoutItem item : getAnalyzeStateDef().getLayoutItems()) { + if (item.getName().equals("ats.Work Package")) { + workPackageWidgetDef = (IAtsWidgetDefinition) item; + break; + } + } + } return workPackageWidgetDef; } - public static MockStateDefinition getImplementStateDef() throws OseeCoreException { + public static IAtsStateDefinition getImplementStateDef() throws OseeCoreException { ensureLoaded(); + if (implement == null) { + implement = workDef.getStateByName("Implement"); + } return implement; } - public static MockStateDefinition getCompletedStateDef() throws OseeCoreException { + public static IAtsStateDefinition getCompletedStateDef() throws OseeCoreException { ensureLoaded(); + if (completed == null) { + completed = workDef.getStateByName("Completed"); + } return completed; } - public static MockStateDefinition getCancelledStateDef() throws OseeCoreException { + public static IAtsStateDefinition getCancelledStateDef() throws OseeCoreException { ensureLoaded(); + if (cancelled == null) { + cancelled = workDef.getStateByName("Cancelled"); + } return cancelled; } @@ -205,7 +239,7 @@ public class AtsTestUtil { workDef = null; estHoursWidgetDef = null; workPackageWidgetDef = null; - teamArt = null; + teamWf = null; teamArt2 = null; teamArt3 = null; teamArt4 = null; @@ -253,87 +287,34 @@ public class AtsTestUtil { private static void reset(String postFixName) throws OseeCoreException { AtsBulkLoad.reloadConfig(true); AtsTestUtil.postFixName = postFixName; - AtsChangeSet changes = new AtsChangeSet(AtsTestUtil.class.getSimpleName()); - workDef = new MockWorkDefinition(WORK_DEF_NAME); - analyze = new MockStateDefinition("Analyze"); - analyze.setWorkDefinition(workDef); - analyze.setStateType(StateType.Working); - analyze.setOrdinal(1); - workDef.addState(analyze); + importWorkDefinition(); - workDef.setStartState(analyze); - - implement = new MockStateDefinition("Implement"); - implement.setWorkDefinition(workDef); - implement.setStateType(StateType.Working); - implement.setOrdinal(2); - workDef.addState(implement); - - completed = new MockStateDefinition("Completed"); - completed.setWorkDefinition(workDef); - completed.setStateType(StateType.Completed); - completed.setOrdinal(3); - workDef.addState(completed); - - cancelled = new MockStateDefinition("Cancelled"); - cancelled.setWorkDefinition(workDef); - cancelled.setStateType(StateType.Cancelled); - cancelled.setOrdinal(4); - workDef.addState(cancelled); - - analyze.setDefaultToState(implement); - analyze.getToStates().addAll(Arrays.asList(implement, completed, cancelled)); - analyze.getOverrideAttributeValidationStates().addAll(Arrays.asList(cancelled)); - - implement.setDefaultToState(completed); - implement.getToStates().addAll(Arrays.asList(analyze, completed, cancelled)); - implement.getOverrideAttributeValidationStates().addAll(Arrays.asList(cancelled, analyze)); - - completed.setDefaultToState(completed); - completed.getToStates().addAll(Arrays.asList(implement)); - completed.getOverrideAttributeValidationStates().addAll(Arrays.asList(implement)); - - cancelled.getToStates().addAll(Arrays.asList(analyze, implement)); - cancelled.getOverrideAttributeValidationStates().addAll(Arrays.asList(analyze, implement)); - - estHoursWidgetDef = new MockWidgetDefinition(AtsAttributeTypes.EstimatedHours.getUnqualifiedName()); - estHoursWidgetDef.setAttributeName(AtsAttributeTypes.EstimatedHours.getName()); - estHoursWidgetDef.setXWidgetName("XFloatDam"); - - workPackageWidgetDef = new MockWidgetDefinition(AtsAttributeTypes.WorkPackage.getUnqualifiedName()); - workPackageWidgetDef.setAttributeName(AtsAttributeTypes.WorkPackage.getName()); - workPackageWidgetDef.setXWidgetName("XTextDam"); - - AtsClientService.get().getWorkDefinitionAdmin().addWorkDefinition(workDef); + AtsChangeSet changes = new AtsChangeSet(AtsTestUtil.class.getSimpleName()); String guid = GUID.create(); testAi = AtsClientService.get().createActionableItem(guid, getTitle("AI", postFixName), AtsUtilClient.createConfigObjectUuid()); testAi.setActive(true); testAi.setActionable(true); - AtsUtilCore.putUuidToGuid(guid, testAi); guid = GUID.create(); testAi2 = AtsClientService.get().createActionableItem(guid, getTitle("AI2", postFixName), AtsUtilClient.createConfigObjectUuid()); testAi2.setActive(true); testAi2.setActionable(true); - AtsUtilCore.putUuidToGuid(guid, testAi2); guid = GUID.create(); testAi3 = AtsClientService.get().createActionableItem(guid, getTitle("AI3", postFixName), AtsUtilClient.createConfigObjectUuid()); testAi3.setActive(true); testAi3.setActionable(true); - AtsUtilCore.putUuidToGuid(guid, testAi3); guid = GUID.create(); testAi4 = AtsClientService.get().createActionableItem(guid, getTitle("AI4", postFixName), AtsUtilClient.createConfigObjectUuid()); testAi4.setActive(true); testAi4.setActionable(true); - AtsUtilCore.putUuidToGuid(guid, testAi4); guid = GUID.create(); teamDef = AtsClientService.get().createTeamDefinition(guid, getTitle("Team Def", postFixName), @@ -341,68 +322,87 @@ public class AtsTestUtil { teamDef.setWorkflowDefinition(WORK_DEF_NAME); teamDef.setActive(true); teamDef.getLeads().add(AtsClientService.get().getUserService().getCurrentUser()); - AtsUtilCore.putUuidToGuid(guid, teamDef); testAi.setTeamDefinition(teamDef); testAi2.setTeamDefinition(teamDef); testAi3.setTeamDefinition(teamDef); testAi4.setTeamDefinition(teamDef); + AtsClientService.get().storeConfigObject(testAi, changes); + AtsClientService.get().storeConfigObject(testAi2, changes); + AtsClientService.get().storeConfigObject(testAi3, changes); + AtsClientService.get().storeConfigObject(testAi4, changes); guid = GUID.create(); - verArt1 = AtsClientService.get().getVersionService().createVersion(guid, getTitle("ver 1.0", postFixName), + verArt1 = AtsClientService.get().getVersionService().createVersion(getTitle("ver 1.0", postFixName), guid, AtsUtilClient.createConfigObjectUuid()); teamDef.getVersions().add(verArt1); - AtsUtilCore.putUuidToGuid(guid, verArt1); + AtsClientService.get().storeConfigObject(verArt1, changes); guid = GUID.create(); - verArt2 = AtsClientService.get().getVersionService().createVersion(guid, getTitle("ver 2.0", postFixName), + verArt2 = AtsClientService.get().getVersionService().createVersion(getTitle("ver 2.0", postFixName), guid, AtsUtilClient.createConfigObjectUuid()); teamDef.getVersions().add(verArt2); - AtsUtilCore.putUuidToGuid(guid, verArt2); + AtsClientService.get().storeConfigObject(verArt2, changes); guid = GUID.create(); - verArt3 = AtsClientService.get().getVersionService().createVersion(guid, getTitle("ver 3.0", postFixName), + verArt3 = AtsClientService.get().getVersionService().createVersion(getTitle("ver 3.0", postFixName), guid, AtsUtilClient.createConfigObjectUuid()); teamDef.getVersions().add(verArt3); - AtsUtilCore.putUuidToGuid(guid, verArt3); + AtsClientService.get().storeConfigObject(verArt3, changes); guid = GUID.create(); - verArt4 = AtsClientService.get().getVersionService().createVersion(guid, getTitle("ver 4.0", postFixName), + verArt4 = AtsClientService.get().getVersionService().createVersion(getTitle("ver 4.0", postFixName), guid, AtsUtilClient.createConfigObjectUuid()); teamDef.getVersions().add(verArt4); - AtsUtilCore.putUuidToGuid(guid, verArt4); + AtsClientService.get().storeConfigObject(verArt4, changes); + + AtsClientService.get().storeConfigObject(teamDef, changes); actionArt = ActionManager.createAction(null, getTitle("Team WF", postFixName), "description", ChangeType.Improvement, "1", false, null, Arrays.asList(testAi), new Date(), AtsClientService.get().getUserService().getCurrentUser(), null, changes); - AtsUtilCore.putUuidToGuid(actionArt.getGuid(), actionArt); - teamArt = actionArt.getFirstTeam(); - AtsUtilCore.putUuidToGuid(actionArt.getGuid(), teamArt); + teamWf = actionArt.getFirstTeam(); changes.execute(); } - public static TaskArtifact getOrCreateTaskOffTeamWf1(AtsChangeSet changes) throws OseeCoreException { - ensureLoaded(); - if (taskArtWf1 == null) { - taskArtWf1 = teamArt.createNewTask(getTitle("Task", postFixName), new Date(), - AtsClientService.get().getUserService().getCurrentUser(), changes); - taskArtWf1.setSoleAttributeValue(AtsAttributeTypes.RelatedToState, teamArt.getCurrentStateName()); - AtsUtilCore.putUuidToGuid(taskArtWf1.getGuid(), taskArtWf1); + public static void importWorkDefinition() { + try { + String atsDsl = + AWorkspace.getOseeInfResource("support/" + WORK_DEF_NAME + ".ats", AtsClientIntegrationTestSuite.class); + JaxAtsWorkDef jaxWorkDef = new JaxAtsWorkDef(); + jaxWorkDef.setName(WORK_DEF_NAME); + jaxWorkDef.setWorkDefDsl(atsDsl); + importWorkDefinition(jaxWorkDef); + } catch (Exception ex) { + throw new OseeCoreException(ex, "Error importing " + WORK_DEF_NAME); } - return taskArtWf1; } - public static TaskArtifact getOrCreateTaskOffTeamWf2(AtsChangeSet changes) throws OseeCoreException { + public static void importWorkDefinition(JaxAtsWorkDef jaxWorkDef) throws Exception { + AtsClientService.getConfigEndpoint().storeWorkDef(jaxWorkDef); + Artifact workDefArt = ArtifactQuery.getArtifactFromTypeAndName(AtsArtifactTypes.WorkDefinition, WORK_DEF_NAME, + AtsUtilCore.getAtsBranch()); + workDefArt.reloadAttributesAndRelations(); + AtsClientService.get().getWorkDefinitionAdmin().clearCaches(); + XResultData results = new XResultData(); + workDef = AtsClientService.get().getWorkDefService().getWorkDef(WORK_DEF_NAME, results); + if (results.isErrors()) { + throw new OseeCoreException("Error importing " + WORK_DEF_NAME + " - " + results.toString()); + } + } + + public static TaskArtifact getOrCreateTaskOffTeamWf1() throws OseeCoreException { ensureLoaded(); - if (taskArtWf2 == null) { - taskArtWf2 = teamArt.createNewTask(getTitle("Task", postFixName), new Date(), - AtsClientService.get().getUserService().getCurrentUser(), changes); - taskArtWf2.setSoleAttributeValue(AtsAttributeTypes.RelatedToState, teamArt.getCurrentStateName()); - AtsUtilCore.putUuidToGuid(taskArtWf2.getGuid(), taskArtWf2); + if (taskArtWf1 == null) { + Collection<IAtsTask> createTasks = + AtsClientService.get().getTaskService().createTasks(teamWf, Arrays.asList(getTitle("Task", postFixName)), + null, new Date(), AtsClientService.get().getUserService().getCurrentUser(), teamWf.getCurrentStateName(), + null, null, getName() + " Create Task"); + taskArtWf1 = (TaskArtifact) createTasks.iterator().next().getStoreObject(); } - return taskArtWf2; + return taskArtWf1; } public static DecisionReviewArtifact getOrCreateDecisionReview(ReviewBlockType reviewBlockType, AtsTestUtilState relatedToState, IAtsChangeSet changes) throws OseeCoreException { @@ -412,18 +412,17 @@ public class AtsTestUtil { options.add(new SimpleDecisionReviewOption(DecisionReviewState.Completed.getName(), false, null)); options.add(new SimpleDecisionReviewOption(DecisionReviewState.Followup.getName(), true, Arrays.asList(AtsClientService.get().getUserService().getCurrentUser().getUserId()))); - decRevArt = DecisionReviewManager.createNewDecisionReview(teamArt, reviewBlockType, + decRevArt = DecisionReviewManager.createNewDecisionReview(teamWf, reviewBlockType, AtsTestUtil.class.getSimpleName() + " Test Decision Review", relatedToState.getName(), "Decision Review", options, Arrays.asList(AtsClientService.get().getUserService().getCurrentUser()), new Date(), AtsClientService.get().getUserService().getCurrentUser(), changes); - AtsUtilCore.putUuidToGuid(decRevArt.getGuid(), decRevArt); } return decRevArt; } public static TeamWorkFlowArtifact getTeamWf() throws OseeCoreException { ensureLoaded(); - return teamArt; + return teamWf; } public static IAtsActionableItem getTestAi() throws OseeCoreException { @@ -485,8 +484,8 @@ public class AtsTestUtil { SMAEditor.closeAll(); TaskEditor.closeAll(); - if (teamArt != null) { - Branch workingBranch = teamArt.getWorkingBranch(); + if (teamWf != null) { + Branch workingBranch = teamWf.getWorkingBranch(); if (workingBranch != null) { BranchManager.deleteBranchAndPend(workingBranch); } @@ -501,11 +500,23 @@ public class AtsTestUtil { delete(changes, actionArt2); delete(changes, actionArt3); delete(changes, actionArt4); + if (verArt1 != null) { + delete(changes, ((Artifact) verArt1.getStoreObject())); + } + if (verArt2 != null) { + delete(changes, ((Artifact) verArt2.getStoreObject())); + } + if (verArt3 != null) { + delete(changes, ((Artifact) verArt3.getStoreObject())); + } + if (verArt4 != null) { + delete(changes, ((Artifact) verArt4.getStoreObject())); + } if (!changes.isEmpty()) { changes.execute(); } - deleteTeamWf(teamArt); + deleteTeamWf(teamWf); deleteTeamWf(teamArt2); deleteTeamWf(teamArt3); deleteTeamWf(teamArt4); @@ -518,6 +529,17 @@ public class AtsTestUtil { art.deleteAndPersist(transaction); } } + + try { + Artifact workDefArt = ArtifactQuery.getArtifactFromTypeAndName(AtsArtifactTypes.WorkDefinition, WORK_DEF_NAME, + AtsUtilCore.getAtsBranch()); + if (workDefArt != null) { + workDefArt.deleteAndPersist(transaction); + } + } catch (ArtifactDoesNotExist ex) { + // do nothing + } + transaction.execute(); clearCaches(); @@ -563,19 +585,19 @@ public class AtsTestUtil { } public static Result transitionTo(AtsTestUtilState atsTestUtilState, IAtsUser user, IAtsChangeSet changes, TransitionOption... transitionOptions) throws OseeCoreException { - if (atsTestUtilState == AtsTestUtilState.Analyze && teamArt.isInState(AtsTestUtilState.Analyze)) { + if (atsTestUtilState == AtsTestUtilState.Analyze && teamWf.isInState(AtsTestUtilState.Analyze)) { return Result.TrueResult; } if (atsTestUtilState == AtsTestUtilState.Cancelled) { - Result result = transitionToState(teamArt, AtsTestUtilState.Cancelled, user, changes, transitionOptions); + Result result = transitionToState(teamWf, AtsTestUtilState.Cancelled, user, changes, transitionOptions); if (result.isFalse()) { return result; } return Result.TrueResult; } - Result result = transitionToState(teamArt, AtsTestUtilState.Implement, user, changes, transitionOptions); + Result result = transitionToState(teamWf, AtsTestUtilState.Implement, user, changes, transitionOptions); if (result.isFalse()) { return result; } @@ -585,7 +607,7 @@ public class AtsTestUtil { } if (atsTestUtilState == AtsTestUtilState.Completed) { - result = transitionToState(teamArt, AtsTestUtilState.Completed, user, changes, transitionOptions); + result = transitionToState(teamWf, AtsTestUtilState.Completed, user, changes, transitionOptions); if (result.isFalse()) { return result; } @@ -632,7 +654,7 @@ public class AtsTestUtil { if (peerRevArt == null) { peerRevArt = PeerToPeerReviewManager.createNewPeerToPeerReview( AtsClientService.get().getWorkDefinitionAdmin().getDefaultPeerToPeerWorkflowDefinitionMatch().getWorkDefinition(), - teamArt, AtsTestUtil.class.getSimpleName() + " Test Peer Review", relatedToState.getName(), changes); + teamWf, AtsTestUtil.class.getSimpleName() + " Test Peer Review", relatedToState.getName(), changes); peerRevArt.setSoleAttributeValue(AtsAttributeTypes.ReviewBlocks, reviewBlockType.name()); } } catch (OseeCoreException ex) { @@ -650,8 +672,6 @@ public class AtsTestUtil { AtsClientService.get().getUserService().getCurrentUser(), null, changes); teamArt2 = actionArt2.getFirstTeam(); changes.execute(); - AtsUtilCore.putUuidToGuid(actionArt2.getGuid(), actionArt2); - AtsUtilCore.putUuidToGuid(teamArt2.getGuid(), teamArt2); } return teamArt2; } @@ -670,8 +690,6 @@ public class AtsTestUtil { AtsClientService.get().getUserService().getCurrentUser(), null, changes); teamArt3 = actionArt3.getFirstTeam(); changes.execute(); - AtsUtilCore.putUuidToGuid(actionArt3.getGuid(), actionArt3); - AtsUtilCore.putUuidToGuid(teamArt3.getGuid(), teamArt3); } return teamArt3; } @@ -692,8 +710,6 @@ public class AtsTestUtil { teamArt4 = actionArt4.getFirstTeam(); AtsClientService.get().getVersionService().setTargetedVersion(teamArt4, verArt4); changes.execute(); - AtsUtilCore.putUuidToGuid(actionArt4.getGuid(), actionArt4); - AtsUtilCore.putUuidToGuid(teamArt4.getGuid(), teamArt4); } return teamArt4; } @@ -764,20 +780,22 @@ public class AtsTestUtil { public static Result createWorkingBranchFromTeamWf() throws OseeCoreException { configureVer1ForWorkingBranch(); - Result result = AtsBranchUtil.createWorkingBranch_Validate(teamArt); + Result result = AtsBranchUtil.createWorkingBranch_Validate(teamWf); if (result.isFalse()) { return result; } - AtsBranchUtil.createWorkingBranch_Create(teamArt, true); - teamArt.getWorkingBranchForceCacheUpdate(); + AtsBranchUtil.createWorkingBranch_Create(teamWf, true); + teamWf.getWorkingBranchForceCacheUpdate(); return Result.TrueResult; } public static void configureVer1ForWorkingBranch() throws OseeCoreException { - IAtsVersion verArt = getVerArt1(); - verArt.setAllowCreateBranch(true); - verArt.setAllowCommitBranch(true); - verArt.setBaselineBranchUuid(BranchManager.getBranch(DemoSawBuilds.SAW_Bld_1).getUuid()); + IAtsVersion version = getVerArt1(); + version.setAllowCreateBranch(true); + version.setAllowCommitBranch(true); + version.setBaselineBranchUuid(BranchManager.getBranch(DemoSawBuilds.SAW_Bld_1).getUuid()); + ((Artifact) version.getStoreObject()).persist(AtsTestUtil.class.getSimpleName() + "-SetTeamWfTargetedVer1"); + AtsClientService.get().getConfig().invalidate(version); if (!AtsClientService.get().getVersionService().hasTargetedVersion(getTeamWf())) { AtsClientService.get().getVersionService().setTargetedVersion(getTeamWf(), getVerArt1()); getTeamWf().persist(AtsTestUtil.class.getSimpleName() + "-SetTeamWfTargetedVer1"); diff --git a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/AtsTestUtilTest.java b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/AtsTestUtilTest.java index ad89903115e..97f800ca3b8 100644 --- a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/AtsTestUtilTest.java +++ b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/AtsTestUtilTest.java @@ -24,7 +24,7 @@ import org.junit.Assert; /** * Test unit for {@link AtsTestUtil} - * + * * @author Donald G. Dunne */ public class AtsTestUtilTest extends AtsTestUtil { @@ -51,6 +51,7 @@ public class AtsTestUtilTest extends AtsTestUtil { Assert.assertNotNull(AtsTestUtil.getTeamWf()); Assert.assertNotNull(AtsTestUtil.getTeamWf().getStateDefinition()); + Assert.assertNotNull(AtsTestUtil.getTeamWf().getTeamDefinition()); String atsId = AtsTestUtil.getTeamWf().getAtsId(); Assert.assertTrue(atsId.startsWith("ATS")); @@ -79,6 +80,7 @@ public class AtsTestUtilTest extends AtsTestUtil { Assert.assertNotNull(AtsTestUtil.getTeamWf2()); Assert.assertNotNull(AtsTestUtil.getTeamWf2().getStateDefinition()); + Assert.assertNotNull(AtsTestUtil.getTeamWf2().getTeamDefinition()); Assert.assertNotSame(AtsTestUtil.getTeamWf(), AtsTestUtil.getTeamWf2()); Assert.assertNotSame(AtsTestUtil.getActionArt(), AtsTestUtil.getActionArt2()); Assert.assertNotSame(AtsTestUtil.getTeamWf().getActionableItemsDam().getActionableItems().iterator().next(), @@ -97,6 +99,7 @@ public class AtsTestUtilTest extends AtsTestUtil { Assert.assertNotNull(AtsTestUtil.getTeamWf4()); Assert.assertNotNull(AtsTestUtil.getTeamWf4().getStateDefinition()); + Assert.assertNotNull(AtsTestUtil.getTeamWf4().getTeamDefinition()); Assert.assertNotSame(AtsTestUtil.getTeamWf(), AtsTestUtil.getTeamWf4()); Assert.assertNotSame(AtsTestUtil.getActionArt(), AtsTestUtil.getActionArt4()); Assert.assertNotSame(AtsTestUtil.getTeamWf().getActionableItemsDam().getActionableItems().iterator().next(), @@ -110,14 +113,27 @@ public class AtsTestUtilTest extends AtsTestUtil { } @org.junit.Test + public void testGetTask1() throws OseeCoreException { + + AtsTestUtil.cleanupAndReset("AtsTestUtilTest.testGetTask1"); + AtsTestUtil.validateArtifactCache(); + + Assert.assertNotNull(AtsTestUtil.getOrCreateTaskOffTeamWf1()); + + AtsTestUtil.cleanup(); + + AtsTestUtil.validateArtifactCache(); + } + + @org.junit.Test public void testGetDecisionReview() throws OseeCoreException { AtsTestUtil.cleanupAndReset("AtsTestUtilTest.testGetDecisionReview"); AtsTestUtil.validateArtifactCache(); AtsChangeSet changes = new AtsChangeSet(getClass().getSimpleName()); - Assert.assertNotNull(AtsTestUtil.getOrCreateDecisionReview(ReviewBlockType.Commit, AtsTestUtilState.Analyze, - changes)); + Assert.assertNotNull( + AtsTestUtil.getOrCreateDecisionReview(ReviewBlockType.Commit, AtsTestUtilState.Analyze, changes)); changes.execute(); AtsTestUtil.cleanup(); @@ -132,7 +148,8 @@ public class AtsTestUtilTest extends AtsTestUtil { AtsTestUtil.validateArtifactCache(); AtsChangeSet changes = new AtsChangeSet("testGetPeerReview"); - Assert.assertNotNull(AtsTestUtil.getOrCreatePeerReview(ReviewBlockType.Commit, AtsTestUtilState.Analyze, changes)); + Assert.assertNotNull( + AtsTestUtil.getOrCreatePeerReview(ReviewBlockType.Commit, AtsTestUtilState.Analyze, changes)); changes.execute(); AtsTestUtil.cleanup(); diff --git a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/review/DecisionReviewDefinitionManagerTest.java b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/review/DecisionReviewDefinitionManagerTest.java index f54da8b22f0..ae06a0f5888 100644 --- a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/review/DecisionReviewDefinitionManagerTest.java +++ b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/review/DecisionReviewDefinitionManagerTest.java @@ -12,37 +12,40 @@ package org.eclipse.osee.ats.client.integration.tests.ats.core.client.review; import java.util.Arrays; import org.eclipse.osee.ats.api.data.AtsAttributeTypes; -import org.eclipse.osee.ats.api.workdef.IAtsStateDefinition; +import org.eclipse.osee.ats.api.workdef.JaxAtsWorkDef; import org.eclipse.osee.ats.api.workdef.ReviewBlockType; -import org.eclipse.osee.ats.api.workdef.StateEventType; import org.eclipse.osee.ats.api.workflow.transition.IAtsTransitionManager; import org.eclipse.osee.ats.api.workflow.transition.TransitionOption; import org.eclipse.osee.ats.api.workflow.transition.TransitionResults; +import org.eclipse.osee.ats.client.integration.AtsClientIntegrationTestSuite; import org.eclipse.osee.ats.client.integration.tests.AtsClientService; import org.eclipse.osee.ats.client.integration.tests.ats.core.client.AtsTestUtil; import org.eclipse.osee.ats.client.integration.tests.ats.core.client.workflow.transition.MockTransitionHelper; import org.eclipse.osee.ats.core.client.review.DecisionReviewArtifact; import org.eclipse.osee.ats.core.client.review.DecisionReviewDefinitionManager; -import org.eclipse.osee.ats.core.client.review.DecisionReviewManager; import org.eclipse.osee.ats.core.client.review.DecisionReviewState; 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.util.AtsChangeSet; +import org.eclipse.osee.ats.core.workflow.state.TeamState; import org.eclipse.osee.ats.core.workflow.transition.TransitionFactory; -import org.eclipse.osee.ats.mocks.MockDecisionReviewDefinition; -import org.eclipse.osee.framework.core.enums.SystemUser; import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; +import org.eclipse.osee.framework.ui.ws.AWorkspace; import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; /** * Test unit for {@link DecisionReviewDefinitionManager} - * + * * @author Donald G. Dunne */ public class DecisionReviewDefinitionManagerTest extends DecisionReviewDefinitionManager { + public static String WORK_DEF_FILE_NAME = "support/WorkDef_Team_DecisionReviewDefinitionManagerTest_toDecision.ats"; + public static String WORK_DEF_FILE_NAME_PREPARE = + "support/WorkDef_Team_DecisionReviewDefinitionManagerTest_Prepare.ats"; + @BeforeClass @AfterClass public static void cleanup() throws Exception { @@ -53,34 +56,32 @@ public class DecisionReviewDefinitionManagerTest extends DecisionReviewDefinitio public void testCreateDecisionReviewDuringTransition_ToDecision() throws OseeCoreException { AtsTestUtil.cleanupAndReset("DecisionReviewDefinitionManagerTest - ToDecision"); - // configure WorkDefinition to create a new Review on transition to Implement - IAtsStateDefinition implement = AtsTestUtil.getImplementStateDef(); - - MockDecisionReviewDefinition revDef = new MockDecisionReviewDefinition("Create New on Implement"); - revDef.setAutoTransitionToDecision(true); - revDef.setBlockingType(ReviewBlockType.Transition); - revDef.setDescription("the description"); - revDef.setRelatedToState(implement.getName()); - revDef.setStateEventType(StateEventType.TransitionTo); - revDef.setReviewTitle("This is my review title"); - revDef.getOptions().addAll(DecisionReviewManager.getDefaultDecisionReviewOptions()); - revDef.getAssignees().add(SystemUser.UnAssigned.getUserId()); - - implement.getDecisionReviews().add(revDef); + try { + String atsDsl = AWorkspace.getOseeInfResource(WORK_DEF_FILE_NAME, AtsClientIntegrationTestSuite.class); + JaxAtsWorkDef jaxWorkDef = new JaxAtsWorkDef(); + jaxWorkDef.setName(AtsTestUtil.WORK_DEF_NAME); + jaxWorkDef.setWorkDefDsl(atsDsl); + AtsTestUtil.importWorkDefinition(jaxWorkDef); + AtsClientService.get().getWorkDefinitionAdmin().clearCaches(); + } catch (Exception ex) { + throw new OseeCoreException(ex, "Error importing " + WORK_DEF_FILE_NAME); + } TeamWorkFlowArtifact teamArt = AtsTestUtil.getTeamWf(); + Assert.assertEquals("Implement State should have a single decision review definition", 1, + teamArt.getWorkDefinition().getStateByName(TeamState.Implement.getName()).getDecisionReviews().size()); Assert.assertEquals("No reviews should be present", 0, ReviewManager.getReviews(teamArt).size()); AtsChangeSet changes = new AtsChangeSet(getClass().getSimpleName()); - MockTransitionHelper helper = - new MockTransitionHelper(getClass().getSimpleName(), Arrays.asList(teamArt), implement.getName(), - Arrays.asList(AtsClientService.get().getUserService().getCurrentUser()), null, changes, TransitionOption.None); + MockTransitionHelper helper = new MockTransitionHelper(getClass().getSimpleName(), Arrays.asList(teamArt), + TeamState.Implement.getName(), Arrays.asList(AtsClientService.get().getUserService().getCurrentUser()), null, + changes, TransitionOption.None); IAtsTransitionManager transitionMgr = TransitionFactory.getTransitionManager(helper); TransitionResults results = transitionMgr.handleAllAndPersist(); + Assert.assertTrue(results.toString(), results.isEmpty()); Assert.assertFalse(teamArt.isDirty()); Assert.assertFalse(teamArt.getLog().isDirty()); - Assert.assertTrue(results.toString(), results.isEmpty()); Assert.assertEquals("One review should be present", 1, ReviewManager.getReviews(teamArt).size()); DecisionReviewArtifact decArt = (DecisionReviewArtifact) ReviewManager.getReviews(teamArt).iterator().next(); @@ -91,7 +92,8 @@ public class DecisionReviewDefinitionManagerTest extends DecisionReviewDefinitio decArt.getSoleAttributeValue(AtsAttributeTypes.ReviewBlocks)); Assert.assertEquals("This is my review title", decArt.getName()); Assert.assertEquals("the description", decArt.getSoleAttributeValue(AtsAttributeTypes.Description)); - Assert.assertEquals(implement.getName(), decArt.getSoleAttributeValue(AtsAttributeTypes.RelatedToState)); + Assert.assertEquals(TeamState.Implement.getName(), + decArt.getSoleAttributeValue(AtsAttributeTypes.RelatedToState)); AtsTestUtil.validateArtifactCache(); } @@ -100,27 +102,25 @@ public class DecisionReviewDefinitionManagerTest extends DecisionReviewDefinitio public void testCreateDecisionReviewDuringTransition_Prepare() throws OseeCoreException { AtsTestUtil.cleanupAndReset("DecisionReviewDefinitionManagerTest - Prepare"); - // configure WorkDefinition to create a new Review on transition to Implement - IAtsStateDefinition implement = AtsTestUtil.getImplementStateDef(); - - MockDecisionReviewDefinition revDef = new MockDecisionReviewDefinition("Create New on Implement"); - revDef.setAutoTransitionToDecision(false); - revDef.setBlockingType(ReviewBlockType.Commit); - revDef.setReviewTitle("This is the title"); - revDef.setDescription("the description"); - revDef.setRelatedToState(implement.getName()); - revDef.setStateEventType(StateEventType.TransitionTo); - revDef.getOptions().addAll(DecisionReviewManager.getDefaultDecisionReviewOptions()); - - implement.getDecisionReviews().add(revDef); + try { + String atsDsl = AWorkspace.getOseeInfResource(WORK_DEF_FILE_NAME_PREPARE, AtsClientIntegrationTestSuite.class); + JaxAtsWorkDef jaxWorkDef = new JaxAtsWorkDef(); + jaxWorkDef.setName(AtsTestUtil.WORK_DEF_NAME); + jaxWorkDef.setWorkDefDsl(atsDsl); + AtsTestUtil.importWorkDefinition(jaxWorkDef); + AtsClientService.get().getWorkDefinitionAdmin().clearCaches(); + } catch (Exception ex) { + throw new OseeCoreException(ex, "Error importing " + WORK_DEF_FILE_NAME_PREPARE); + } TeamWorkFlowArtifact teamArt = AtsTestUtil.getTeamWf(); Assert.assertEquals("No reviews should be present", 0, ReviewManager.getReviews(teamArt).size()); AtsChangeSet changes = new AtsChangeSet(getClass().getSimpleName()); - MockTransitionHelper helper = - new MockTransitionHelper(getClass().getSimpleName(), Arrays.asList(teamArt), implement.getName(), - Arrays.asList(AtsClientService.get().getUserService().getCurrentUser()), null, changes, TransitionOption.None); + MockTransitionHelper helper = new MockTransitionHelper(getClass().getSimpleName(), Arrays.asList(teamArt), + TeamState.Implement.getName(), Arrays.asList(AtsClientService.get().getUserService().getCurrentUser + + ()), null, changes, TransitionOption.None); IAtsTransitionManager transitionMgr = TransitionFactory.getTransitionManager(helper); TransitionResults results = transitionMgr.handleAllAndPersist(); @@ -135,7 +135,8 @@ public class DecisionReviewDefinitionManagerTest extends DecisionReviewDefinitio Assert.assertEquals(ReviewBlockType.Commit.name(), decArt.getSoleAttributeValue(AtsAttributeTypes.ReviewBlocks)); Assert.assertEquals("This is the title", decArt.getName()); Assert.assertEquals("the description", decArt.getSoleAttributeValue(AtsAttributeTypes.Description)); - Assert.assertEquals(implement.getName(), decArt.getSoleAttributeValue(AtsAttributeTypes.RelatedToState)); + Assert.assertEquals(TeamState.Implement.getName(), + decArt.getSoleAttributeValue(AtsAttributeTypes.RelatedToState)); AtsTestUtil.validateArtifactCache(); } diff --git a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/review/PeerReviewDefinitionManagerTest.java b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/review/PeerReviewDefinitionManagerTest.java index f55a721a200..4ddbbf43ffd 100644 --- a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/review/PeerReviewDefinitionManagerTest.java +++ b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/review/PeerReviewDefinitionManagerTest.java @@ -12,12 +12,12 @@ package org.eclipse.osee.ats.client.integration.tests.ats.core.client.review; import java.util.Arrays; import org.eclipse.osee.ats.api.data.AtsAttributeTypes; -import org.eclipse.osee.ats.api.workdef.IAtsStateDefinition; +import org.eclipse.osee.ats.api.workdef.JaxAtsWorkDef; import org.eclipse.osee.ats.api.workdef.ReviewBlockType; -import org.eclipse.osee.ats.api.workdef.StateEventType; import org.eclipse.osee.ats.api.workflow.transition.IAtsTransitionManager; import org.eclipse.osee.ats.api.workflow.transition.TransitionOption; import org.eclipse.osee.ats.api.workflow.transition.TransitionResults; +import org.eclipse.osee.ats.client.integration.AtsClientIntegrationTestSuite; import org.eclipse.osee.ats.client.integration.tests.AtsClientService; import org.eclipse.osee.ats.client.integration.tests.ats.core.client.AtsTestUtil; import org.eclipse.osee.ats.client.integration.tests.ats.core.client.workflow.transition.MockTransitionHelper; @@ -27,21 +27,23 @@ import org.eclipse.osee.ats.core.client.review.PeerToPeerReviewState; 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.util.AtsChangeSet; +import org.eclipse.osee.ats.core.workflow.state.TeamState; import org.eclipse.osee.ats.core.workflow.transition.TransitionFactory; -import org.eclipse.osee.ats.mocks.MockPeerReviewDefinition; -import org.eclipse.osee.framework.core.enums.SystemUser; import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; +import org.eclipse.osee.framework.ui.ws.AWorkspace; import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; /** * Test unit for {@link PeerReviewDefinitionManager} - * + * * @author Donald G. Dunne */ public class PeerReviewDefinitionManagerTest extends PeerReviewDefinitionManager { + public static String WORK_DEF_FILE_NAME = "support/WorkDef_Team_PeerReviewDefinitionManagerTest_Transition.ats"; + @BeforeClass @AfterClass public static void cleanup() throws Exception { @@ -52,26 +54,26 @@ public class PeerReviewDefinitionManagerTest extends PeerReviewDefinitionManager public void testCreatePeerReviewDuringTransition() throws OseeCoreException { AtsTestUtil.cleanupAndReset("PeerReviewDefinitionManagerTest"); - // configure WorkDefinition to create a new Review on transition to Implement - IAtsStateDefinition implement = AtsTestUtil.getImplementStateDef(); - - MockPeerReviewDefinition revDef = new MockPeerReviewDefinition("Create New on Implement"); - revDef.setBlockingType(ReviewBlockType.Transition); - revDef.setDescription("the description"); - revDef.setRelatedToState(implement.getName()); - revDef.setStateEventType(StateEventType.TransitionTo); - revDef.setReviewTitle("This is my review title"); - revDef.getAssignees().add(SystemUser.UnAssigned.getUserId()); - - implement.getPeerReviews().add(revDef); + try { + String atsDsl = AWorkspace.getOseeInfResource(WORK_DEF_FILE_NAME, AtsClientIntegrationTestSuite.class); + JaxAtsWorkDef jaxWorkDef = new JaxAtsWorkDef(); + jaxWorkDef.setName(AtsTestUtil.WORK_DEF_NAME); + jaxWorkDef.setWorkDefDsl(atsDsl); + AtsTestUtil.importWorkDefinition(jaxWorkDef); + AtsClientService.get().getWorkDefinitionAdmin().clearCaches(); + } catch (Exception ex) { + throw new OseeCoreException(ex, "Error importing " + WORK_DEF_FILE_NAME); + } TeamWorkFlowArtifact teamArt = AtsTestUtil.getTeamWf(); + Assert.assertEquals("Implement State should have a single peer review definition", 1, + teamArt.getWorkDefinition().getStateByName(TeamState.Implement.getName()).getPeerReviews().size()); Assert.assertEquals("No reviews should be present", 0, ReviewManager.getReviews(teamArt).size()); AtsChangeSet changes = new AtsChangeSet(getClass().getSimpleName()); - MockTransitionHelper helper = - new MockTransitionHelper(getClass().getSimpleName(), Arrays.asList(teamArt), implement.getName(), - Arrays.asList(AtsClientService.get().getUserService().getCurrentUser()), null, changes, TransitionOption.None); + MockTransitionHelper helper = new MockTransitionHelper(getClass().getSimpleName(), Arrays.asList(teamArt), + TeamState.Implement.getName(), Arrays.asList(AtsClientService.get().getUserService().getCurrentUser()), null, + changes, TransitionOption.None); IAtsTransitionManager transitionMgr = TransitionFactory.getTransitionManager(helper); TransitionResults results = transitionMgr.handleAllAndPersist(); @@ -86,7 +88,8 @@ public class PeerReviewDefinitionManagerTest extends PeerReviewDefinitionManager decArt.getSoleAttributeValue(AtsAttributeTypes.ReviewBlocks)); Assert.assertEquals("This is my review title", decArt.getName()); Assert.assertEquals("the description", decArt.getSoleAttributeValue(AtsAttributeTypes.Description)); - Assert.assertEquals(implement.getName(), decArt.getSoleAttributeValue(AtsAttributeTypes.RelatedToState)); + Assert.assertEquals(TeamState.Implement.getName(), + decArt.getSoleAttributeValue(AtsAttributeTypes.RelatedToState)); AtsTestUtil.validateArtifactCache(); } diff --git a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/review/PeerToPeerReviewManagerTest.java b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/review/PeerToPeerReviewManagerTest.java index aacff78dd36..952d8cd3bc2 100644 --- a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/review/PeerToPeerReviewManagerTest.java +++ b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/review/PeerToPeerReviewManagerTest.java @@ -35,7 +35,7 @@ import org.junit.BeforeClass; /** * Test unit for {@link PeerToPeerReviewManager} - * + * * @author Donald G. Dunne */ public class PeerToPeerReviewManagerTest extends PeerToPeerReviewManager { @@ -44,9 +44,8 @@ public class PeerToPeerReviewManagerTest extends PeerToPeerReviewManager { @AfterClass public static void cleanup() throws Exception { AtsTestUtil.cleanup(); - SkynetTransaction transaction = - TransactionManager.createTransaction(AtsUtilCore.getAtsBranch(), - PeerToPeerReviewManagerTest.class.getSimpleName()); + SkynetTransaction transaction = TransactionManager.createTransaction(AtsUtilCore.getAtsBranch(), + PeerToPeerReviewManagerTest.class.getSimpleName()); for (Artifact art : ArtifactQuery.getArtifactListFromTypeAndName(AtsArtifactTypes.PeerToPeerReview, "PeerToPeerReviewManagerTest", AtsUtilCore.getAtsBranch(), QueryOption.CONTAINS_MATCH_OPTIONS)) { if (art.getName().contains("StandAlone")) { @@ -65,10 +64,9 @@ public class PeerToPeerReviewManagerTest extends PeerToPeerReviewManager { AtsChangeSet changes = new AtsChangeSet(getClass().getSimpleName()); String reviewTitle = "Test Review - " + teamArt.getName(); - PeerToPeerReviewArtifact peerArt = - PeerToPeerReviewManager.createNewPeerToPeerReview(teamArt, reviewTitle, - AtsTestUtil.getAnalyzeStateDef().getName(), new Date(), - AtsClientService.get().getUserService().getCurrentUser(), changes); + PeerToPeerReviewArtifact peerArt = PeerToPeerReviewManager.createNewPeerToPeerReview(teamArt, reviewTitle, + AtsTestUtil.getAnalyzeStateDef().getName(), new Date(), + AtsClientService.get().getUserService().getCurrentUser(), changes); changes.execute(); Assert.assertNotNull(peerArt); @@ -92,9 +90,8 @@ public class PeerToPeerReviewManagerTest extends PeerToPeerReviewManager { AtsChangeSet changes = new AtsChangeSet(getClass().getSimpleName()); String reviewTitle = "Test Review - " + teamArt.getName(); - PeerToPeerReviewArtifact peerArt = - PeerToPeerReviewManager.createNewPeerToPeerReview(teamArt, reviewTitle, - AtsTestUtil.getAnalyzeStateDef().getName(), changes); + PeerToPeerReviewArtifact peerArt = PeerToPeerReviewManager.createNewPeerToPeerReview(teamArt, reviewTitle, + AtsTestUtil.getAnalyzeStateDef().getName(), changes); changes.execute(); Assert.assertNotNull(peerArt); @@ -117,9 +114,8 @@ public class PeerToPeerReviewManagerTest extends PeerToPeerReviewManager { AtsChangeSet changes = new AtsChangeSet(getClass().getSimpleName()); String reviewTitle = "Test Review - " + testAi; - PeerToPeerReviewArtifact peerArt = - PeerToPeerReviewManager.createNewPeerToPeerReview(testAi, reviewTitle, null, new Date(), - AtsClientService.get().getUserService().getCurrentUser(), changes); + PeerToPeerReviewArtifact peerArt = PeerToPeerReviewManager.createNewPeerToPeerReview(testAi, reviewTitle, null, + new Date(), AtsClientService.get().getUserService().getCurrentUser(), changes); changes.execute(); Assert.assertNotNull(peerArt); @@ -128,6 +124,7 @@ public class PeerToPeerReviewManagerTest extends PeerToPeerReviewManager { peerArt.isDirty()); Assert.assertEquals(PeerToPeerReviewState.Prepare.getName(), peerArt.getCurrentStateName()); Assert.assertEquals("Joe Smith", peerArt.getStateMgr().getAssigneesStr()); - Assert.assertEquals(peerArt.getSoleAttributeValue(AtsAttributeTypes.ActionableItem), AtsUtilCore.getGuid(testAi)); + Assert.assertEquals(((Artifact) AtsTestUtil.getTestAi().getStoreObject()).getGuid(), + peerArt.getSoleAttributeValue(AtsAttributeTypes.ActionableItem)); } } diff --git a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/task/TaskManagerTest.java b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/task/TaskManagerTest.java index f26775ac0db..954e79eada0 100644 --- a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/task/TaskManagerTest.java +++ b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/task/TaskManagerTest.java @@ -10,10 +10,17 @@ *******************************************************************************/ package org.eclipse.osee.ats.client.integration.tests.ats.core.client.task; +import static org.mockito.Mockito.when; +import java.util.ArrayList; import java.util.Arrays; +import java.util.List; import org.eclipse.osee.ats.api.data.AtsAttributeTypes; -import org.eclipse.osee.ats.api.team.IAtsTeamDefinition; import org.eclipse.osee.ats.api.workdef.IAtsWorkDefinition; +import org.eclipse.osee.ats.api.workdef.IAtsWorkDefinitionAdmin; +import org.eclipse.osee.ats.api.workdef.IWorkDefinitionMatch; +import org.eclipse.osee.ats.api.workdef.JaxAtsWorkDef; +import org.eclipse.osee.ats.api.workflow.IAtsTask; +import org.eclipse.osee.ats.api.workflow.IAtsTeamWorkflow; import org.eclipse.osee.ats.client.integration.tests.AtsClientService; import org.eclipse.osee.ats.client.integration.tests.ats.core.client.AtsTestUtil; import org.eclipse.osee.ats.core.client.task.TaskArtifact; @@ -25,19 +32,34 @@ import org.eclipse.osee.ats.core.util.HoursSpentUtil; import org.eclipse.osee.framework.core.util.Result; import org.eclipse.osee.framework.core.util.XResultData; import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; -import org.junit.AfterClass; import org.junit.Assert; +import org.junit.Before; import org.junit.BeforeClass; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; /** * Test unit for {@link TaskManager} - * + * * @author Donald G. Dunne */ public class TaskManagerTest extends TaskManager { + // @formatter:off + @Mock private IAtsTeamWorkflow teamWf, teamWf2; + @Mock private IAtsTask task1; + @Mock private IAtsWorkDefinitionAdmin workDefinitionAdmin; + @Mock private IWorkDefinitionMatch match1; + @Mock private IAtsWorkDefinition taskWorkDef1, taskWorkDef2; + // @formatter:on + + @Before + public void setup() { + AtsTestUtil.cleanup(); + MockitoAnnotations.initMocks(this); + } + @BeforeClass - @AfterClass public static void cleanup() throws OseeCoreException { AtsTestUtil.cleanup(); } @@ -48,15 +70,14 @@ public class TaskManagerTest extends TaskManager { @org.junit.Test public void testMoveTasks_sameWorkDefinitions() throws OseeCoreException { AtsTestUtil.cleanupAndReset("testMoveTasks - sameWorkDefs"); - AtsChangeSet changes = new AtsChangeSet(getClass().getSimpleName()); - TaskArtifact taskToMove = AtsTestUtil.getOrCreateTaskOffTeamWf1(changes); - changes.execute(); + TaskArtifact taskToMove = AtsTestUtil.getOrCreateTaskOffTeamWf1(); TeamWorkFlowArtifact teamWf2 = AtsTestUtil.getTeamWf2(); IAtsWorkDefinition taskWorkDef = AtsClientService.get().getWorkDefinitionAdmin().getWorkDefinitionForTask(taskToMove).getWorkDefinition(); IAtsWorkDefinition newTaskWorkDef = - AtsClientService.get().getWorkDefinitionAdmin().getWorkDefinitionForTaskNotYetCreated(teamWf2).getWorkDefinition(); + AtsClientService.get().getWorkDefinitionAdmin().getWorkDefinitionForTaskNotYetCreated( + teamWf2).getWorkDefinition(); Assert.assertNotNull(taskWorkDef); Assert.assertEquals(taskWorkDef, newTaskWorkDef); @@ -70,34 +91,29 @@ public class TaskManagerTest extends TaskManager { */ @org.junit.Test public void testMoveTasks_differentWorkDefinitions() throws OseeCoreException { - AtsTestUtil.cleanupAndReset("testMoveTasks - diffWorkDefs"); - AtsChangeSet changes = new AtsChangeSet(getClass().getSimpleName()); - TaskArtifact taskToMove = AtsTestUtil.getOrCreateTaskOffTeamWf1(changes); - changes.execute(); - TeamWorkFlowArtifact teamWf2 = AtsTestUtil.getTeamWf2(); - IAtsWorkDefinition taskWorkDef = - AtsClientService.get().getWorkDefinitionAdmin().getWorkDefinitionForTask(taskToMove).getWorkDefinition(); - - // create new task work def - XResultData resultData = new XResultData(); - AtsClientService.get().getWorkDefinitionAdmin(); - IAtsWorkDefinition differentTaskWorkDef = - AtsClientService.get().getWorkDefinitionAdmin().copyWorkDefinition(taskWorkDef.getName() + "2", taskWorkDef, - resultData); - Assert.assertFalse("Should be no errors", resultData.isErrors()); - AtsClientService.get().getWorkDefinitionAdmin().addWorkDefinition(differentTaskWorkDef); - - // set teamWf2 to use that work def for tasks - IAtsTeamDefinition teamDef = teamWf2.getTeamDefinition(); - teamDef.setRelatedTaskWorkDefinition(differentTaskWorkDef.getName()); - - IAtsWorkDefinition newTaskWorkDef = - AtsClientService.get().getWorkDefinitionAdmin().getWorkDefinitionForTaskNotYetCreated(teamWf2).getWorkDefinition(); - Assert.assertNotNull(taskWorkDef); - Assert.assertNotSame("Should be different", taskWorkDef, newTaskWorkDef); - Result result = TaskManager.moveTasks(teamWf2, Arrays.asList(taskToMove)); - - Assert.assertTrue("This should failed: " + result.getText(), result.isFalse()); + List<IAtsTask> tasks = new ArrayList<>(); + tasks.add(task1); + when(teamWf.getUuid()).thenReturn(34534L); + when(teamWf2.getUuid()).thenReturn(9999L); + when(task1.getParentTeamWorkflow()).thenReturn(teamWf); + + // fail when moving to same workflow as is already parent + Result result = TaskManager.moveTasksIsValid(teamWf, tasks, workDefinitionAdmin); + Assert.assertTrue(result.isFalse()); + Assert.assertTrue(result.toString().contains("workflows are the same")); + + // move if task defines it's own work definition + when(workDefinitionAdmin.isTaskOverridingItsWorkDefinition(task1)).thenReturn(true); + result = TaskManager.moveTasksIsValid(teamWf2, tasks, workDefinitionAdmin); + Assert.assertTrue(result.isTrue()); + + when(workDefinitionAdmin.isTaskOverridingItsWorkDefinition(task1)).thenReturn(false); + when(workDefinitionAdmin.getWorkDefinitionForTaskNotYetCreated(teamWf2)).thenReturn(match1); + when(match1.getWorkDefinition()).thenReturn(taskWorkDef1); + when(task1.getWorkDefinition()).thenReturn(taskWorkDef2); + result = TaskManager.moveTasksIsValid(teamWf2, tasks, workDefinitionAdmin); + Assert.assertTrue(result.isFalse()); + Assert.assertTrue(result.toString().contains("does not match current")); } /** @@ -107,9 +123,7 @@ public class TaskManagerTest extends TaskManager { @org.junit.Test public void testMoveTasks_diffWorkDefinitionsButTaskOverride() throws OseeCoreException { AtsTestUtil.cleanupAndReset("testMoveTasks - diffWorkDefinitionsButTaskOverride"); - AtsChangeSet changes = new AtsChangeSet(getClass().getSimpleName()); - TaskArtifact taskToMove = AtsTestUtil.getOrCreateTaskOffTeamWf1(changes); - changes.execute(); + TaskArtifact taskToMove = AtsTestUtil.getOrCreateTaskOffTeamWf1(); TeamWorkFlowArtifact teamWf2 = AtsTestUtil.getTeamWf2(); IAtsWorkDefinition taskWorkDef = AtsClientService.get().getWorkDefinitionAdmin().getWorkDefinitionForTask(taskToMove).getWorkDefinition(); @@ -117,10 +131,14 @@ public class TaskManagerTest extends TaskManager { // create new task work def XResultData resultData = new XResultData(); AtsClientService.get().getWorkDefinitionAdmin(); - IAtsWorkDefinition differentTaskWorkDef = - AtsClientService.get().getWorkDefinitionAdmin().copyWorkDefinition(taskWorkDef.getName() + "2", taskWorkDef, - resultData); - Assert.assertFalse("Should be no errors", resultData.isErrors()); + IAtsWorkDefinition differentTaskWorkDef = AtsClientService.get().getWorkDefinitionAdmin().copyWorkDefinition( + taskWorkDef.getName() + "2", taskWorkDef, resultData); + Assert.assertFalse("Should be no errors: " + resultData.toString(), resultData.isErrors()); + resultData.clear(); + + storeWorkDefinition(resultData, differentTaskWorkDef); + + Assert.assertFalse("Should be no errors: " + resultData.toString(), resultData.isErrors()); AtsClientService.get().getWorkDefinitionAdmin().addWorkDefinition(differentTaskWorkDef); // set work definition override on task; move should go through @@ -128,7 +146,8 @@ public class TaskManagerTest extends TaskManager { taskToMove.persist("testMoveTasks - set workDef attribute on task"); IAtsWorkDefinition newTaskWorkDef = - AtsClientService.get().getWorkDefinitionAdmin().getWorkDefinitionForTaskNotYetCreated(teamWf2).getWorkDefinition(); + AtsClientService.get().getWorkDefinitionAdmin().getWorkDefinitionForTaskNotYetCreated( + teamWf2).getWorkDefinition(); Assert.assertNotNull(taskWorkDef); Assert.assertSame("Should be same", taskWorkDef, newTaskWorkDef); Result result = TaskManager.moveTasks(teamWf2, Arrays.asList(taskToMove)); @@ -136,20 +155,34 @@ public class TaskManagerTest extends TaskManager { Assert.assertTrue("This should pass: " + result.getText(), result.isTrue()); } + private void storeWorkDefinition(XResultData resultData, IAtsWorkDefinition differentTaskWorkDef) { + JaxAtsWorkDef jaxWorkDef = new JaxAtsWorkDef(); + jaxWorkDef.setName(differentTaskWorkDef.getName()); + String workDefXml; + try { + workDefXml = + AtsClientService.get().getWorkDefinitionAdmin().getStorageString(differentTaskWorkDef, resultData); + } catch (Exception ex) { + resultData.errorf("Exception getting storage string for work def [%s]: ex [%s]", + differentTaskWorkDef.getName(), ex.getLocalizedMessage()); + return; + } + jaxWorkDef.setWorkDefDsl(workDefXml); + AtsClientService.getConfigEndpoint().storeWorkDef(jaxWorkDef); + } + @org.junit.Test public void testTransitionToCompletedThenInWork() throws OseeCoreException { AtsTestUtil.cleanupAndReset("TaskManagerTest - TransitionToCompleted"); - AtsChangeSet changes = new AtsChangeSet(getClass().getSimpleName()); - TaskArtifact taskArt = AtsTestUtil.getOrCreateTaskOffTeamWf1(changes); - changes.execute(); + TaskArtifact taskArt = AtsTestUtil.getOrCreateTaskOffTeamWf1(); // ensure nothing dirty AtsTestUtil.validateArtifactCache(); // transition to Completed - changes = new AtsChangeSet(getClass().getSimpleName() + " testTransitionToCompletedThenInWork() 1"); + AtsChangeSet changes = new AtsChangeSet(getClass().getSimpleName() + " testTransitionToCompletedThenInWork() 1"); Result result = TaskManager.transitionToCompleted(taskArt, 0.0, 3, changes); Assert.assertEquals(Result.TrueResult, result); changes.execute(); @@ -163,9 +196,8 @@ public class TaskManagerTest extends TaskManager { // transition back to InWork changes = new AtsChangeSet(getClass().getSimpleName() + " testTransitionToCompletedThenInWork() 2"); - result = - TaskManager.transitionToInWork(taskArt, AtsClientService.get().getUserService().getCurrentUser(), 45, .5, - changes); + result = TaskManager.transitionToInWork(taskArt, AtsClientService.get().getUserService().getCurrentUser(), 45, .5, + changes); Assert.assertEquals(Result.TrueResult, result); changes.execute(); Assert.assertEquals(TaskStates.InWork.getName(), taskArt.getCurrentStateName()); diff --git a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/util/CopyActionDetailsTest.java b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/util/CopyActionDetailsTest.java index 9ce07b97e91..1a156d0381d 100644 --- a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/util/CopyActionDetailsTest.java +++ b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/util/CopyActionDetailsTest.java @@ -48,12 +48,10 @@ public class CopyActionDetailsTest { @Test public void test02GetDetailsStringForTask() throws OseeCoreException { - AtsChangeSet changes = new AtsChangeSet(getClass().getSimpleName()); - String str = new CopyActionDetails(AtsTestUtil.getOrCreateTaskOffTeamWf1(changes)).getDetailsString(); + String str = new CopyActionDetails(AtsTestUtil.getOrCreateTaskOffTeamWf1()).getDetailsString(); assertEquals( - "\"Task\" - " + AtsTestUtil.getOrCreateTaskOffTeamWf1(changes).getAtsId() + " - \"AtsTestUtil - Task [CopyActionDetailsTest]\"", + "\"Task\" - " + AtsTestUtil.getOrCreateTaskOffTeamWf1().getAtsId() + " - \"AtsTestUtil - Task [CopyActionDetailsTest]\"", str); - changes.execute(); } @Test @@ -68,9 +66,8 @@ public class CopyActionDetailsTest { @Test public void test04GetDetailsStringForPeerReview() throws OseeCoreException { - PeerToPeerReviewArtifact review = - AtsTestUtil.getOrCreatePeerReview(ReviewBlockType.None, AtsTestUtilState.Analyze, new AtsChangeSet( - "test04GetDetailsStringForPeerReview")); + PeerToPeerReviewArtifact review = AtsTestUtil.getOrCreatePeerReview(ReviewBlockType.None, + AtsTestUtilState.Analyze, new AtsChangeSet("test04GetDetailsStringForPeerReview")); String str = new CopyActionDetails(review).getDetailsString(); assertEquals("\"PeerToPeer Review\" - " + review.getAtsId() + " - \"AtsTestUtil Test Peer Review\"", str); review.persist(getClass().getSimpleName()); diff --git a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/workflow/transition/TransitionManagerTest.java b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/workflow/transition/TransitionManagerTest.java index f66a41b7ff8..320046172a4 100644 --- a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/workflow/transition/TransitionManagerTest.java +++ b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/core/client/workflow/transition/TransitionManagerTest.java @@ -10,24 +10,30 @@ *******************************************************************************/ package org.eclipse.osee.ats.client.integration.tests.ats.core.client.workflow.transition; +import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.Arrays; -import java.util.Date; +import java.util.Collections; import java.util.List; import org.eclipse.osee.ats.api.data.AtsAttributeTypes; import org.eclipse.osee.ats.api.data.AtsRelationTypes; import org.eclipse.osee.ats.api.team.IAtsTeamDefinition; import org.eclipse.osee.ats.api.user.IAtsUser; import org.eclipse.osee.ats.api.workdef.IAtsStateDefinition; -import org.eclipse.osee.ats.api.workdef.IAtsWidgetDefinition; +import org.eclipse.osee.ats.api.workdef.JaxAtsWorkDef; import org.eclipse.osee.ats.api.workdef.ReviewBlockType; import org.eclipse.osee.ats.api.workdef.RuleDefinitionOption; -import org.eclipse.osee.ats.api.workdef.WidgetOption; +import org.eclipse.osee.ats.api.workdef.StateType; +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.state.IAtsStateManager; import org.eclipse.osee.ats.api.workflow.transition.IAtsTransitionManager; import org.eclipse.osee.ats.api.workflow.transition.TransitionOption; import org.eclipse.osee.ats.api.workflow.transition.TransitionResult; import org.eclipse.osee.ats.api.workflow.transition.TransitionResults; import org.eclipse.osee.ats.client.demo.DemoUsers; +import org.eclipse.osee.ats.client.integration.AtsClientIntegrationTestSuite; import org.eclipse.osee.ats.client.integration.tests.AtsClientService; import org.eclipse.osee.ats.client.integration.tests.ats.core.client.AtsTestUtil; import org.eclipse.osee.ats.client.integration.tests.ats.core.client.AtsTestUtil.AtsTestUtilState; @@ -35,8 +41,6 @@ import org.eclipse.osee.ats.core.client.review.DecisionReviewArtifact; import org.eclipse.osee.ats.core.client.review.DecisionReviewManager; import org.eclipse.osee.ats.core.client.review.DecisionReviewState; import org.eclipse.osee.ats.core.client.review.PeerToPeerReviewArtifact; -import org.eclipse.osee.ats.core.client.task.TaskArtifact; -import org.eclipse.osee.ats.core.client.task.TaskManager; import org.eclipse.osee.ats.core.client.team.TeamWorkFlowArtifact; import org.eclipse.osee.ats.core.client.util.AtsChangeSet; import org.eclipse.osee.ats.core.client.workflow.AbstractWorkflowArtifact; @@ -44,13 +48,16 @@ import org.eclipse.osee.ats.core.workflow.state.TeamState; import org.eclipse.osee.ats.core.workflow.transition.TransitionFactory; import org.eclipse.osee.ats.core.workflow.transition.TransitionHelper; import org.eclipse.osee.ats.core.workflow.transition.TransitionManager; -import org.eclipse.osee.ats.mocks.MockStateDefinition; import org.eclipse.osee.framework.core.enums.SystemUser; import org.eclipse.osee.framework.core.util.Result; import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; +import org.eclipse.osee.framework.ui.ws.AWorkspace; import org.junit.AfterClass; import org.junit.Assert; +import org.junit.Before; import org.junit.BeforeClass; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; /** * Test unit for {@link TransitionManager} @@ -60,6 +67,25 @@ import org.junit.BeforeClass; public class TransitionManagerTest { private static List<AbstractWorkflowArtifact> EMPTY_AWAS = new ArrayList<>(); + public static String WORK_DEF_TARGETED_VERSION_FILE_NAME = + "support/WorkDef_Team_TransitionManagerTest_TargetedVersion.ats"; + public static String WORK_DEF_WIDGET_REQUIRED_TRANSITION_FILE_NAME = + "support/WorkDef_Team_TransitionManagerTest_WidgetRequiredTransition.ats"; + private static String WORK_DEF_WIDGET_REQUIRED_COMPLETION_FILE_NAME = + "support/WorkDef_Team_TransitionManagerTest_WidgetRequiredCompletion.ats"; + + // @formatter:off + @Mock private IAtsTeamWorkflow teamWf; + @Mock private IAtsTask task; + @Mock private IAtsStateDefinition toStateDef; + @Mock private IAtsWorkItemService workItemService; + @Mock private IAtsStateManager teamWfStateMgr, taskStateMgr; + // @formatter:on + + @Before + public void setup() { + MockitoAnnotations.initMocks(this); + } @BeforeClass @AfterClass @@ -249,24 +275,13 @@ public class TransitionManagerTest { transMgr.handleTransitionValidation(results); Assert.assertTrue("Test wasn't reset to allow transition", results.isEmpty()); - IAtsWidgetDefinition estHoursWidget = AtsTestUtil.getEstHoursWidgetDef(); - fromStateDef.getLayoutItems().add(estHoursWidget); - IAtsWidgetDefinition workPackageWidget = AtsTestUtil.getWorkPackageWidgetDef(); - fromStateDef.getLayoutItems().add(workPackageWidget); - // test that two widgets validate transMgr.handleTransitionValidation(results); Assert.assertTrue(results.isEmpty()); // test that estHours required fails validation results.clear(); - estHoursWidget.getOptions().add(WidgetOption.REQUIRED_FOR_TRANSITION); - transMgr.handleTransitionValidation(results); - Assert.assertTrue(results.contains("[Estimated Hours] is required for transition")); - - // test that workPackage required fails both widgets - results.clear(); - workPackageWidget.getOptions().add(WidgetOption.REQUIRED_FOR_TRANSITION); + loadWorkDefForTest(WORK_DEF_WIDGET_REQUIRED_TRANSITION_FILE_NAME); transMgr.handleTransitionValidation(results); Assert.assertTrue(results.contains("[Estimated Hours] is required for transition")); Assert.assertTrue(results.contains("[Work Package] is required for transition")); @@ -289,26 +304,20 @@ public class TransitionManagerTest { transMgr.handleTransitionValidation(results); Assert.assertTrue("Test wasn't reset to allow transition", results.isEmpty()); - IAtsWidgetDefinition estHoursWidget = AtsTestUtil.getEstHoursWidgetDef(); - fromStateDef.getLayoutItems().add(estHoursWidget); - IAtsWidgetDefinition workPackageWidget = AtsTestUtil.getWorkPackageWidgetDef(); - fromStateDef.getLayoutItems().add(workPackageWidget); - // test that two widgets validate transMgr.handleTransitionValidation(results); Assert.assertTrue(results.isEmpty()); - // test that Work Package only widget required for normal transition + // test that neither are required for transition to implement results.clear(); helper.setToStateName(AtsTestUtil.getImplementStateDef().getName()); - estHoursWidget.getOptions().add(WidgetOption.REQUIRED_FOR_COMPLETION); - workPackageWidget.getOptions().add(WidgetOption.REQUIRED_FOR_TRANSITION); transMgr.handleTransitionValidation(results); - Assert.assertTrue(results.contains("[Work Package] is required for transition")); + Assert.assertTrue(results.isEmpty()); - // test that Estimated House and Work Package required for transition to completed + // test that Work Package only widget required for normal transition results.clear(); helper.setToStateName(AtsTestUtil.getCompletedStateDef().getName()); + loadWorkDefForTest(WORK_DEF_WIDGET_REQUIRED_COMPLETION_FILE_NAME); transMgr.handleTransitionValidation(results); Assert.assertTrue(results.contains("[Estimated Hours] is required for transition to [Completed]")); Assert.assertTrue(results.contains("[Work Package] is required for transition")); @@ -329,64 +338,40 @@ public class TransitionManagerTest { @org.junit.Test public void testIsStateTransitionable__ValidateTasks() throws OseeCoreException { - AtsTestUtil.cleanupAndReset("TransitionManagerTest-3"); - TeamWorkFlowArtifact teamArt = AtsTestUtil.getTeamWf(); - MockTransitionHelper helper = new MockTransitionHelper(getClass().getSimpleName(), Arrays.asList(teamArt), - AtsTestUtil.getImplementStateDef().getName(), - Arrays.asList(AtsClientService.get().getUserService().getCurrentUser()), null, - new AtsChangeSet(getClass().getSimpleName()), TransitionOption.None); - IAtsTransitionManager transMgr = TransitionFactory.getTransitionManager(helper); + TransitionResults results = new TransitionResults(); + when(teamWf.isTeamWorkflow()).thenReturn(true); - // validate that can transition - transMgr.handleTransitionValidation(results); + // validate that if rule exists and is working, then transition with tasks is ok + when(teamWf.getStateDefinition()).thenReturn(toStateDef); + when(toStateDef.getStateType()).thenReturn(StateType.Working); + when(toStateDef.hasRule(RuleDefinitionOption.AllowTransitionWithoutTaskCompletion.name())).thenReturn(true); + TransitionManager.validateTaskCompletion(results, teamWf, toStateDef, workItemService); Assert.assertTrue(results.isEmpty()); - // validate that can't transition with InWork task - AtsChangeSet changes = new AtsChangeSet(getClass().getSimpleName()); - TaskArtifact taskArt = teamArt.createNewTask("New Tasks", new Date(), - AtsClientService.get().getUserService().getCurrentUser(), teamArt.getCurrentStateName(), changes); - changes.execute(); - String relatedToState = taskArt.getSoleAttributeValue(AtsAttributeTypes.RelatedToState, ""); + // test only check if Team Workflow + when(toStateDef.hasRule(RuleDefinitionOption.AllowTransitionWithoutTaskCompletion.name())).thenReturn(false); + TransitionManager.validateTaskCompletion(results, task, toStateDef, workItemService); + Assert.assertTrue(results.isEmpty()); - results.clear(); - transMgr.handleTransitionValidation(results); - Assert.assertTrue(results.contains(teamArt, TransitionResult.TASKS_NOT_COMPLETED)); + // test not check if working state + when(teamWf.getStateMgr()).thenReturn(teamWfStateMgr); + when(teamWfStateMgr.getStateType()).thenReturn(StateType.Working); + TransitionManager.validateTaskCompletion(results, teamWf, toStateDef, workItemService); + Assert.assertTrue(results.isEmpty()); - MockStateDefinition teamCurrentState = (MockStateDefinition) teamArt.getStateDefinition(); + // test transition to completed; all tasks are completed + when(toStateDef.getStateType()).thenReturn(StateType.Completed); + when(workItemService.getTaskArtifacts(teamWf)).thenReturn(Collections.singleton(task)); + when(task.getStateMgr()).thenReturn(taskStateMgr); + when(taskStateMgr.getStateType()).thenReturn(StateType.Completed); + TransitionManager.validateTaskCompletion(results, teamWf, toStateDef, workItemService); + Assert.assertTrue(results.isEmpty()); - try { - // test that can transition with AllowTransitionWithoutTaskCompletion rule on state - teamCurrentState.addRule(RuleDefinitionOption.AllowTransitionWithoutTaskCompletion.name()); - // transition task to completed - results.clear(); - - // should not get transition validation error now - results.clear(); - transMgr.handleTransitionValidation(results); - Assert.assertTrue(results.isEmpty()); - - // attempt to transition parent to cancelled, should not be able to transition with un-completed/cancelled tasks - helper = new MockTransitionHelper(getClass().getSimpleName(), Arrays.asList(teamArt), - AtsTestUtil.getCancelledStateDef().getName(), - Arrays.asList(AtsClientService.get().getUserService().getCurrentUser()), null, - new AtsChangeSet(getClass().getSimpleName()), TransitionOption.None); - transMgr = TransitionFactory.getTransitionManager(helper); - results.clear(); - transMgr.handleTransitionValidation(results); - Assert.assertTrue(results.contains(teamArt, TransitionResult.TASKS_NOT_COMPLETED)); - - // Cleanup task by completing and validate can transition - changes = new AtsChangeSet(getClass().getSimpleName()); - TaskManager.transitionToCompleted(taskArt, 0.0, 0.1, changes); - changes.execute(); - results.clear(); - transMgr.handleTransitionValidation(results); - Assert.assertTrue(results.isEmpty()); - } finally { - // just in case test goes bad, make sure we remove this rule - teamCurrentState.removeRule(RuleDefinitionOption.AllowTransitionWithoutTaskCompletion.name()); - } + // test transtion to completed; task is not completed + when(taskStateMgr.getStateType()).thenReturn(StateType.Working); + TransitionManager.validateTaskCompletion(results, teamWf, toStateDef, workItemService); + Assert.assertTrue(results.contains(TransitionResult.TASKS_NOT_COMPLETED.getDetails())); } @@ -434,7 +419,8 @@ public class TransitionManagerTest { Assert.assertTrue(results.isEmpty()); // validate that can't transition without targeted version when team def rule is set - AtsTestUtil.getAnalyzeStateDef().addRule(RuleDefinitionOption.RequireTargetedVersion.name()); + loadWorkDefForTest(WORK_DEF_TARGETED_VERSION_FILE_NAME); + results.clear(); transMgr.handleTransitionValidation(results); Assert.assertTrue(results.contains(teamArt, TransitionResult.MUST_BE_TARGETED_FOR_VERSION)); @@ -446,6 +432,19 @@ public class TransitionManagerTest { Assert.assertTrue(results.isEmpty()); } + private void loadWorkDefForTest(String workDefFilename) { + try { + String atsDsl = AWorkspace.getOseeInfResource(workDefFilename, AtsClientIntegrationTestSuite.class); + JaxAtsWorkDef jaxWorkDef = new JaxAtsWorkDef(); + jaxWorkDef.setName(AtsTestUtil.WORK_DEF_NAME); + jaxWorkDef.setWorkDefDsl(atsDsl); + AtsTestUtil.importWorkDefinition(jaxWorkDef); + AtsClientService.get().getWorkDefinitionAdmin().clearCaches(); + } catch (Exception ex) { + throw new OseeCoreException(ex, "Error importing " + workDefFilename); + } + } + @org.junit.Test public void testIsStateTransitionable__ReviewsCompleted() throws OseeCoreException { diff --git a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/workflow/AtsTaskEndpointImplTest.java b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/workflow/AtsTaskEndpointImplTest.java index f649da447c2..583d2c69bcf 100644 --- a/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/workflow/AtsTaskEndpointImplTest.java +++ b/plugins/org.eclipse.osee.ats.client.integration.tests/src/org/eclipse/osee/ats/client/integration/tests/ats/workflow/AtsTaskEndpointImplTest.java @@ -20,6 +20,8 @@ import org.eclipse.osee.ats.api.task.AtsTaskEndpointApi; import org.eclipse.osee.ats.api.task.JaxAtsTask; import org.eclipse.osee.ats.api.task.JaxAttribute; import org.eclipse.osee.ats.api.task.NewTaskData; +import org.eclipse.osee.ats.api.task.NewTaskDataFactory; +import org.eclipse.osee.ats.api.task.NewTaskDatas; import org.eclipse.osee.ats.client.demo.DemoUsers; import org.eclipse.osee.ats.client.demo.DemoUtil; import org.eclipse.osee.ats.client.integration.tests.AtsClientService; @@ -61,12 +63,10 @@ public class AtsTaskEndpointImplTest { @Test public void testTaskCRD() { // Test Create - NewTaskData data = new NewTaskData(); String createdByUserId = DemoUsers.Joe_Smith.getUserId(); - data.setAsUserId(createdByUserId); Date createdDate = new Date(); - data.setCommitComment("Create Tasks via - " + getClass().getSimpleName()); - data.setTeamWfUuid(codeTeamWfUuid); + NewTaskData data = NewTaskDataFactory.get("Create Tasks via - " + getClass().getSimpleName(), + DemoUsers.Joe_Smith.getUserId(), codeTeamWfUuid); JaxAtsTask task = createJaxAtsTask(taskUuid1, "Task 1", "description", createdByUserId, createdDate, null); task.setTaskWorkDef("WorkDef_Task_Default"); @@ -80,7 +80,7 @@ public class AtsTaskEndpointImplTest { task3.addAttribute(CoreAttributeTypes.StaticId.getName(), "my static id"); data.getNewTasks().add(task3); - Response response = taskEp.create(data); + Response response = taskEp.create(new NewTaskDatas(data)); Assert.assertEquals(Response.Status.OK.getStatusCode(), response.getStatus()); // Test Get diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/branch/AtsBranchUtil.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/branch/AtsBranchUtil.java index ab19cf4bfef..fe5783e96ad 100644 --- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/branch/AtsBranchUtil.java +++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/branch/AtsBranchUtil.java @@ -57,6 +57,7 @@ public class AtsBranchUtil { * @return true if one or more reviews were created */ public static boolean createNecessaryBranchEventReviews(StateEventType stateEventType, TeamWorkFlowArtifact teamArt, Date createdDate, IAtsUser createdBy, IAtsChangeSet changes) throws OseeCoreException { + Conditions.checkNotNull(teamArt, "Team Workflow"); boolean created = false; if (stateEventType != StateEventType.CommitBranch && stateEventType != StateEventType.CreateBranch) { throw new OseeStateException("Invalid stateEventType [%s]", stateEventType); @@ -64,9 +65,8 @@ public class AtsBranchUtil { // Create any decision and peerToPeer reviews for createBranch and commitBranch for (IAtsDecisionReviewDefinition decRevDef : teamArt.getStateDefinition().getDecisionReviews()) { if (decRevDef.getStateEventType() != null && decRevDef.getStateEventType().equals(stateEventType)) { - DecisionReviewArtifact decArt = - DecisionReviewDefinitionManager.createNewDecisionReview(decRevDef, changes, teamArt, createdDate, - createdBy); + DecisionReviewArtifact decArt = DecisionReviewDefinitionManager.createNewDecisionReview(decRevDef, changes, + teamArt, createdDate, createdBy); if (decArt != null) { created = true; changes.add(decArt); @@ -75,9 +75,8 @@ public class AtsBranchUtil { } for (IAtsPeerReviewDefinition peerRevDef : teamArt.getStateDefinition().getPeerReviews()) { if (peerRevDef.getStateEventType() != null && peerRevDef.getStateEventType().equals(stateEventType)) { - PeerToPeerReviewArtifact peerArt = - PeerReviewDefinitionManager.createNewPeerToPeerReview(peerRevDef, changes, teamArt, createdDate, - createdBy); + PeerToPeerReviewArtifact peerArt = PeerReviewDefinitionManager.createNewPeerToPeerReview(peerRevDef, + changes, teamArt, createdDate, createdBy); if (peerArt != null) { created = true; changes.add(peerArt); @@ -89,7 +88,7 @@ public class AtsBranchUtil { /** * Perform error checks and popup confirmation dialogs associated with creating a working branch. - * + * * @param popup if true, errors are popped up to user; otherwise sent silently in Results * @return Result return of status */ @@ -178,14 +177,13 @@ public class AtsBranchUtil { private static void performPostBranchCreationTasks(final TeamWorkFlowArtifact teamArt) throws OseeCoreException { // Create reviews as necessary AtsChangeSet changes = new AtsChangeSet("Create Reviews upon Transition"); - boolean created = - createNecessaryBranchEventReviews(StateEventType.CreateBranch, teamArt, new Date(), AtsCoreUsers.SYSTEM_USER, - changes); + boolean created = createNecessaryBranchEventReviews(StateEventType.CreateBranch, teamArt, new Date(), + AtsCoreUsers.SYSTEM_USER, changes); if (created) { changes.execute(); } - // Notify extensions of branch creation + // Notify extensions of branch creation for (IAtsStateItemCore item : AtsStateItemCoreManager.getStateItems()) { item.workingBranchCreated(teamArt); } diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/config/IAtsClientVersionService.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/config/IAtsClientVersionService.java index 7b04588472c..50ac01af975 100644 --- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/config/IAtsClientVersionService.java +++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/config/IAtsClientVersionService.java @@ -32,7 +32,7 @@ public interface IAtsClientVersionService extends IAtsVersionService { Branch getBranch(IAtsVersion version); - IAtsVersion createVersion(String title, String guid, long uuid); + IAtsVersion createVersion(String name, String guid, long uuid); IAtsVersion createVersion(String name); 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 21cfd88f349..a65b2fafdd4 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 @@ -499,6 +499,7 @@ public class AtsClientImpl extends AtsCoreServiceImpl implements IAtsClient { */ @Override public Artifact getArtifact(long uuid) throws OseeCoreException { + Conditions.checkExpressionFailOnTrue(uuid <= 0, "Uuid must be > 0; is %d", uuid); Artifact result = null; try { result = ArtifactQuery.getArtifactFromId((int) uuid, AtsUtilCore.getAtsBranch()); @@ -816,7 +817,7 @@ public class AtsClientImpl extends AtsCoreServiceImpl implements IAtsClient { } @Override - public Artifact getArtifactByName(IArtifactType artType, String name) { + public ArtifactId getArtifactByName(IArtifactType artType, String name) { return ArtifactQuery.getArtifactFromTypeAndNameNoException(artType, name, AtsUtilCore.getAtsBranch()); } diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/task/AbstractTaskableArtifact.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/task/AbstractTaskableArtifact.java index 1ff69e21bfc..db2f7325f72 100644 --- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/task/AbstractTaskableArtifact.java +++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/task/AbstractTaskableArtifact.java @@ -11,34 +11,25 @@ package org.eclipse.osee.ats.core.client.task; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; -import java.util.Date; -import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.logging.Level; -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.user.IAtsUser; -import org.eclipse.osee.ats.api.util.IAtsChangeSet; import org.eclipse.osee.ats.api.workdef.IStateToken; 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.util.AtsTaskCache; import org.eclipse.osee.ats.core.client.workflow.AbstractWorkflowArtifact; -import org.eclipse.osee.ats.core.util.AtsUtilCore; import org.eclipse.osee.ats.core.util.PercentCompleteTotalUtil; import org.eclipse.osee.framework.core.data.IArtifactType; import org.eclipse.osee.framework.core.model.Branch; import org.eclipse.osee.framework.core.util.Result; import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; -import org.eclipse.osee.framework.jdk.core.util.Strings; import org.eclipse.osee.framework.logging.OseeLog; import org.eclipse.osee.framework.skynet.core.artifact.Artifact; -import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager; /** * @author Donald G. Dunne @@ -89,41 +80,6 @@ public abstract class AbstractTaskableArtifact extends AbstractWorkflowArtifact return getRelatedArtifactsCount(AtsRelationTypes.TeamWfToTask_Task) > 0; } - public TaskArtifact createNewTask(String title, Date createdDate, IAtsUser createdBy, IAtsChangeSet changes) throws OseeCoreException { - return createNewTask(Arrays.asList(AtsClientService.get().getUserService().getCurrentUser()), title, createdDate, - createdBy, null, changes); - } - - public TaskArtifact createNewTask(List<? extends IAtsUser> assignees, String title, Date createdDate, IAtsUser createdBy, IAtsChangeSet changes) throws OseeCoreException { - return createNewTask(assignees, title, createdDate, createdBy, null, changes); - } - - public TaskArtifact createNewTask(String title, Date createdDate, IAtsUser createdBy, String relatedToState, IAtsChangeSet changes) throws OseeCoreException { - return createNewTask(Arrays.asList(AtsClientService.get().getUserService().getCurrentUser()), title, createdDate, - createdBy, relatedToState, changes); - } - - public TaskArtifact createNewTask(List<? extends IAtsUser> assignees, String title, Date createdDate, IAtsUser createdBy, String relatedToState, IAtsChangeSet changes) throws OseeCoreException { - TaskArtifact taskArt = null; - taskArt = - (TaskArtifact) ArtifactTypeManager.addArtifact(AtsArtifactTypes.Task, AtsUtilCore.getAtsBranch(), title); - - AtsClientService.get().getUtilService().setAtsId(AtsClientService.get().getSequenceProvider(), taskArt, - getParentTeamWorkflow().getTeamDefinition(), changes); - - addRelation(AtsRelationTypes.TeamWfToTask_Task, taskArt); - taskArt.initializeNewStateMachine(assignees, new Date(), - (createdBy == null ? AtsClientService.get().getUserService().getCurrentUser() : createdBy), changes); - - // Set parent state task is related to if set - if (Strings.isValid(relatedToState)) { - taskArt.setSoleAttributeValue(AtsAttributeTypes.RelatedToState, relatedToState); - } - AtsTaskCache.decache(this); - changes.add(taskArt); - return taskArt; - } - public Result areTasksComplete() { try { for (TaskArtifact taskArt : getTaskArtifacts()) { @@ -238,30 +194,6 @@ public abstract class AbstractTaskableArtifact extends AbstractWorkflowArtifact return spent / taskArts.size(); } - public Collection<TaskArtifact> createTasks(List<String> titles, List<IAtsUser> assignees, Date createdDate, IAtsUser createdBy, IAtsChangeSet changes) throws OseeCoreException { - return createTasks(titles, assignees, createdDate, createdBy, null, changes); - } - - /** - * @param relatedToState State name Tasks must be completed in or null - */ - public Collection<TaskArtifact> createTasks(List<String> titles, List<IAtsUser> assignees, Date createdDate, IAtsUser createdBy, String relatedToState, IAtsChangeSet changes) throws OseeCoreException { - List<TaskArtifact> tasks = new ArrayList<>(); - for (String title : titles) { - TaskArtifact taskArt = createNewTask(title, createdDate, createdBy, relatedToState, changes); - if (assignees != null && !assignees.isEmpty()) { - Set<IAtsUser> users = new HashSet<>(); // NOPMD by b0727536 on 9/29/10 8:51 AM - for (IAtsUser art : assignees) { - users.add(art); - } - taskArt.getStateMgr().setAssignees(users); - } - tasks.add(taskArt); - changes.add(taskArt); - } - return tasks; - } - public int getPercentCompleteFromTasks() { int spent = 0; Collection<TaskArtifact> taskArts = getTaskArtifacts(); diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/task/AtsTaskService.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/task/AtsTaskService.java index 0427f9d286f..8e8a83a292b 100644 --- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/task/AtsTaskService.java +++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/task/AtsTaskService.java @@ -16,6 +16,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; import org.eclipse.osee.ats.api.data.AtsArtifactTypes; import org.eclipse.osee.ats.api.data.AtsRelationTypes; import org.eclipse.osee.ats.api.task.AbstractAtsTaskService; @@ -23,6 +24,7 @@ import org.eclipse.osee.ats.api.task.AtsTaskEndpointApi; import org.eclipse.osee.ats.api.task.JaxAtsTask; import org.eclipse.osee.ats.api.task.JaxAtsTasks; import org.eclipse.osee.ats.api.task.NewTaskData; +import org.eclipse.osee.ats.api.task.NewTaskDatas; import org.eclipse.osee.ats.api.user.IAtsUser; import org.eclipse.osee.ats.api.util.IAtsChangeSet; import org.eclipse.osee.ats.api.workflow.IAtsTask; @@ -33,6 +35,7 @@ import org.eclipse.osee.ats.core.util.AtsUtilCore; import org.eclipse.osee.framework.core.enums.DeletionFlag; import org.eclipse.osee.framework.core.model.event.DefaultBasicGuidArtifact; import org.eclipse.osee.framework.core.model.event.DefaultBasicUuidRelation; +import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; 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.event.OseeEventManager; @@ -55,15 +58,33 @@ public class AtsTaskService extends AbstractAtsTaskService { } @Override - public Collection<IAtsTask> createTasks(NewTaskData newTaskData) { + public Collection<IAtsTask> createTasks(NewTaskDatas newTaskDatas) { AtsTaskEndpointApi taskEp = AtsClientService.getTaskEp(); - Response response = taskEp.create(newTaskData); + Response response = taskEp.create(newTaskDatas); + if (response.getStatus() != Status.OK.getStatusCode()) { + throw new OseeCoreException("Error creating task [%s] [%s]", newTaskDatas, response.toString()); + } + + List<IAtsTask> tasks = new LinkedList<>(); + ArtifactEvent artifactEvent = new ArtifactEvent(AtsUtilCore.getAtsBranch()); + for (NewTaskData newTaskData : newTaskDatas.getTaskDatas()) { + processForEvents(newTaskData, response, tasks, artifactEvent); + } + + OseeEventManager.kickPersistEvent(getClass(), artifactEvent); + return tasks; + } + + private void processForEvents(NewTaskData newTaskData, Response response, List<IAtsTask> tasks, ArtifactEvent artifactEvent2) { Artifact teamWf = atsClient.getArtifact(newTaskData.getTeamWfUuid()); JaxAtsTasks jaxTasks = response.readEntity(JaxAtsTasks.class); ArtifactEvent artifactEvent = new ArtifactEvent(AtsUtilCore.getAtsBranch()); List<Long> artUuids = new LinkedList<>(); + + teamWf.reloadAttributesAndRelations(); + for (JaxAtsTask task : jaxTasks.getTasks()) { String guid = ArtifactQuery.getGuidFromUuid(task.getUuid(), AtsUtilCore.getAtsBranch()); artifactEvent.getArtifacts().add(new EventBasicGuidArtifact(EventModType.Added, @@ -71,23 +92,22 @@ public class AtsTaskService extends AbstractAtsTaskService { artUuids.add(task.getUuid()); RelationLink relation = getRelation(teamWf, task); - Artifact taskArt = atsClient.getArtifact(task.getUuid()); + relation = getRelation(teamWf, task); + if (relation != null) { + Artifact taskArt = atsClient.getArtifact(task.getUuid()); - DefaultBasicUuidRelation guidRelation = new DefaultBasicUuidRelation(AtsUtilCore.getAtsBranch().getUuid(), - AtsRelationTypes.TeamWfToTask_Task.getGuid(), relation.getId(), relation.getGammaId(), - getBasicGuidArtifact(teamWf), getBasicGuidArtifact(taskArt)); + DefaultBasicUuidRelation guidRelation = new DefaultBasicUuidRelation(AtsUtilCore.getAtsBranch().getUuid(), + AtsRelationTypes.TeamWfToTask_Task.getGuid(), relation.getId(), relation.getGammaId(), + getBasicGuidArtifact(teamWf), getBasicGuidArtifact(taskArt)); - artifactEvent.getRelations().add(new EventBasicGuidRelation(RelationEventType.Added, - newTaskData.getTeamWfUuid().intValue(), new Long(task.getUuid()).intValue(), guidRelation)); + artifactEvent.getRelations().add(new EventBasicGuidRelation(RelationEventType.Added, + newTaskData.getTeamWfUuid().intValue(), new Long(task.getUuid()).intValue(), guidRelation)); + } } - OseeEventManager.kickPersistEvent(getClass(), artifactEvent); - - List<IAtsTask> tasks = new LinkedList<>(); for (Long uuid : artUuids) { tasks.add(AtsClientService.get().getWorkItemFactory().getTask(AtsClientService.get().getArtifact(uuid))); } - return tasks; } public static DefaultBasicGuidArtifact getBasicGuidArtifact(Artifact artifact) { diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/task/TaskManager.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/task/TaskManager.java index b7ff9d50b9b..73f0ed9a06d 100644 --- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/task/TaskManager.java +++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/task/TaskManager.java @@ -18,7 +18,10 @@ import org.eclipse.osee.ats.api.data.AtsAttributeTypes; import org.eclipse.osee.ats.api.data.AtsRelationTypes; import org.eclipse.osee.ats.api.user.IAtsUser; import org.eclipse.osee.ats.api.util.IAtsChangeSet; +import org.eclipse.osee.ats.api.workdef.IAtsWorkDefinitionAdmin; import org.eclipse.osee.ats.api.workdef.IWorkDefinitionMatch; +import org.eclipse.osee.ats.api.workflow.IAtsTask; +import org.eclipse.osee.ats.api.workflow.IAtsTeamWorkflow; import org.eclipse.osee.ats.api.workflow.transition.IAtsTransitionManager; import org.eclipse.osee.ats.api.workflow.transition.TransitionOption; import org.eclipse.osee.ats.api.workflow.transition.TransitionResults; @@ -62,9 +65,8 @@ public class TaskManager { if (estimatedHours > 0.0) { taskArt.setSoleAttributeValue(AtsAttributeTypes.EstimatedHours, estimatedHours); } - TransitionHelper helper = - new TransitionHelper("Transition to Completed", Arrays.asList(taskArt), TaskStates.Completed.getName(), - null, null, changes, AtsClientService.get().getServices()); + TransitionHelper helper = new TransitionHelper("Transition to Completed", Arrays.asList(taskArt), + TaskStates.Completed.getName(), null, null, changes, AtsClientService.get().getServices()); IAtsTransitionManager transitionMgr = TransitionFactory.getTransitionManager(helper); TransitionResults results = transitionMgr.handleAll(); @@ -83,16 +85,16 @@ public class TaskManager { if (taskArt.isInState(TaskStates.InWork)) { return Result.TrueResult; } - TransitionHelper helper = - new TransitionHelper("Transition to InWork", Arrays.asList(taskArt), TaskStates.InWork.getName(), - Arrays.asList(toUser), null, changes, AtsClientService.get().getServices(), - TransitionOption.OverrideAssigneeCheck); + TransitionHelper helper = new TransitionHelper("Transition to InWork", Arrays.asList(taskArt), + TaskStates.InWork.getName(), Arrays.asList(toUser), null, changes, AtsClientService.get().getServices(), + TransitionOption.OverrideAssigneeCheck); IAtsTransitionManager transitionMgr = TransitionFactory.getTransitionManager(helper); TransitionResults results = transitionMgr.handleAll(); if (!results.isEmpty()) { return new Result("Transition Error %s", results.toString()); } - if (taskArt.getStateMgr().getPercentComplete(taskArt.getCurrentStateName()) != percentComplete || additionalHours > 0) { + if (taskArt.getStateMgr().getPercentComplete( + taskArt.getCurrentStateName()) != percentComplete || additionalHours > 0) { taskArt.getStateMgr().updateMetrics(taskArt.getStateDefinition(), additionalHours, percentComplete, true, AtsClientService.get().getUserService().getCurrentUser()); } @@ -103,21 +105,9 @@ public class TaskManager { } public static Result moveTasks(TeamWorkFlowArtifact newParent, List<TaskArtifact> taskArts) throws OseeCoreException { - for (TaskArtifact taskArt : taskArts) { - // task dropped on same awa as current parent; do nothing - if (taskArt.getParentAWA().equals(newParent)) { - return Result.FalseResult; - } - - // Validate able to move tasks; WorkDefinitions must match - boolean taskOverridesItsWorkDefinition = - AtsClientService.get().getWorkDefinitionAdmin().isTaskOverridingItsWorkDefinition(taskArt); - IWorkDefinitionMatch match = - AtsClientService.get().getWorkDefinitionAdmin().getWorkDefinitionForTaskNotYetCreated(newParent); - if (!taskOverridesItsWorkDefinition && !taskArt.getWorkDefinition().equals(match.getWorkDefinition())) { - return new Result( - "Desitination Task WorkDefinition does not match current Task WorkDefintion; Move Aborted"); - } + Result result = moveTasksIsValid(newParent, taskArts, AtsClientService.get().getWorkDefinitionAdmin()); + if (result.isFalse()) { + return result; } // Move Tasks @@ -139,4 +129,22 @@ public class TaskManager { return Result.TrueResult; } + protected static Result moveTasksIsValid(IAtsTeamWorkflow newParent, List<? extends IAtsTask> tasks, IAtsWorkDefinitionAdmin workDefinitionAdmin) { + for (IAtsTask task : tasks) { + // task dropped on same awa as current parent; do nothing + if (task.getParentTeamWorkflow().getUuid() == newParent.getUuid()) { + return new Result("Source and Destination workflows are the same; Move Aborted"); + } + + // Validate able to move tasks; WorkDefinitions must match + boolean taskOverridesItsWorkDefinition = workDefinitionAdmin.isTaskOverridingItsWorkDefinition(task); + IWorkDefinitionMatch match = workDefinitionAdmin.getWorkDefinitionForTaskNotYetCreated(newParent); + if (!taskOverridesItsWorkDefinition && !task.getWorkDefinition().equals(match.getWorkDefinition())) { + return new Result( + "Desitination Task WorkDefinition does not match current Task WorkDefintion; Move Aborted"); + } + } + return Result.TrueResult; + } + } diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/util/AtsChangeSet.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/util/AtsChangeSet.java index bdf85845fe8..92521ae4114 100644 --- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/util/AtsChangeSet.java +++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/util/AtsChangeSet.java @@ -54,14 +54,14 @@ import org.eclipse.osee.framework.skynet.core.transaction.TransactionManager; */ public class AtsChangeSet extends AbstractAtsChangeSet { - public AtsChangeSet(String comment, IAtsUser user) { - super(comment, user); - } - public AtsChangeSet(String comment) { this(comment, AtsClientService.get().getUserService().getCurrentUser()); } + public AtsChangeSet(String comment, IAtsUser atsUser) { + super(comment, atsUser); + } + @Override public void execute() throws OseeCoreException { Conditions.checkNotNull(comment, "comment"); diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/util/AtsUtilClient.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/util/AtsUtilClient.java index e5fdc2138a8..28b833f9c18 100644 --- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/util/AtsUtilClient.java +++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/util/AtsUtilClient.java @@ -27,14 +27,13 @@ import org.eclipse.osee.framework.core.enums.Active; import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; 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.Lib; import org.eclipse.osee.framework.logging.OseeLog; import org.eclipse.osee.framework.skynet.core.artifact.Artifact; -import org.eclipse.osee.framework.skynet.core.artifact.ArtifactFactory; import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery; import org.eclipse.osee.framework.skynet.core.event.filter.ArtifactTypeEventFilter; import org.eclipse.osee.framework.skynet.core.event.filter.BranchUuidEventFilter; import org.eclipse.osee.framework.skynet.core.event.filter.IEventFilter; -import org.eclipse.osee.framework.skynet.core.utility.ConnectionHandler; import org.eclipse.osee.framework.skynet.core.utility.DbUtil; /** @@ -64,7 +63,7 @@ public class AtsUtilClient { * @return uuid for ATS Config Object creation */ public static long createConfigObjectUuid() { - return ConnectionHandler.getNextSequence(ArtifactFactory.ART_ID_SEQ, true); + return Lib.generateArtifactIdAsInt(); } public static void setEmailEnabled(boolean enabled) { 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 d67a8f769f4..cba7fde3f1b 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 @@ -517,7 +517,7 @@ public abstract class AbstractWorkflowArtifact extends AbstractAtsArtifact imple } } else { if (changes.isAttributeTypeValid(this, AtsAttributeTypes.CreatedBy)) { - changes.setSoleAttributeValue((ArtifactId) this, AtsAttributeTypes.CreatedBy, user.getUserId()); + changes.setSoleAttributeValue((IAtsWorkItem) this, AtsAttributeTypes.CreatedBy, user.getUserId()); } if (date != null && changes.isAttributeTypeValid(this, AtsAttributeTypes.CreatedDate)) { changes.setSoleAttributeValue(this, AtsAttributeTypes.CreatedDate, date); @@ -544,7 +544,7 @@ public abstract class AbstractWorkflowArtifact extends AbstractAtsArtifact imple public void internalSetCreatedBy(IAtsUser user, IAtsChangeSet changes) throws OseeCoreException { if (changes.isAttributeTypeValid(this, AtsAttributeTypes.CreatedBy)) { - changes.setSoleAttributeValue((ArtifactId) this, AtsAttributeTypes.CreatedBy, user.getUserId()); + changes.setSoleAttributeValue((IAtsWorkItem) this, AtsAttributeTypes.CreatedBy, user.getUserId()); } } @@ -600,7 +600,7 @@ public abstract class AbstractWorkflowArtifact extends AbstractAtsArtifact imple if (changes == null) { setSoleAttributeValue(AtsAttributeTypes.CancelledReason, reason); } else { - changes.setSoleAttributeValue((ArtifactId) this, AtsAttributeTypes.CancelledReason, reason); + changes.setSoleAttributeValue((IAtsWorkItem) this, AtsAttributeTypes.CancelledReason, reason); } } @@ -790,7 +790,7 @@ public abstract class AbstractWorkflowArtifact extends AbstractAtsArtifact imple @Override public void setAtsId(String atsId, IAtsChangeSet changes) throws OseeCoreException { - changes.setSoleAttributeValue((ArtifactId) this, AtsAttributeTypes.AtsId, atsId); + changes.setSoleAttributeValue((IAtsWorkItem) this, AtsAttributeTypes.AtsId, atsId); } @Override 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 0095b44862e..9e70e6faddf 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 @@ -19,6 +19,7 @@ import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import org.eclipse.osee.ats.api.IAtsServices; import org.eclipse.osee.ats.api.ai.IAtsActionableItem; import org.eclipse.osee.ats.api.data.AtsAttributeTypes; import org.eclipse.osee.ats.api.review.IAtsPeerToPeerReview; @@ -70,6 +71,7 @@ public class AtsWorkDefinitionAdminImplTest { @Mock CacheProvider<AtsWorkDefinitionCache> cacheProvider; @Mock IAttributeResolver attributeResolver; @Mock IAtsTask task; + @Mock IAtsServices services; private AtsWorkDefinitionAdminImpl workDefAmin; 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 dff66799174..33b5243e04e 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 @@ -155,11 +155,11 @@ public class AtsWorkDefinitionAdminImpl implements IAtsWorkDefinitionAdmin { } } if (match.isMatched()) { - OseeLog.logf(AtsWorkDefinitionAdminImpl.class, Level.INFO, "Loaded Work Definition [%s]", match); + OseeLog.logf(AtsWorkDefinitionAdminImpl.class, Level.FINE, "Loaded Work Definition [%s]", match); getCache().cache(id, match); toReturn = match; } else { - OseeLog.logf(AtsWorkDefinitionAdminImpl.class, Level.INFO, "Unable to load Work Definition [%s]", id); + OseeLog.logf(AtsWorkDefinitionAdminImpl.class, Level.SEVERE, "Unable to load Work Definition [%s]", id); } } if (toReturn == null) { @@ -480,4 +480,5 @@ public class AtsWorkDefinitionAdminImpl implements IAtsWorkDefinitionAdmin { Collection<IAtsRuleDefinition> ruleDefs = ruleDefinitionCache.asMap().values(); return ruleDefs; } + } diff --git a/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/workflow/transition/TransitionManager.java b/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/workflow/transition/TransitionManager.java index 45cc8dc902c..faa5b3ed485 100644 --- a/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/workflow/transition/TransitionManager.java +++ b/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/workflow/transition/TransitionManager.java @@ -355,7 +355,7 @@ public class TransitionManager implements IAtsTransitionManager { helper.isOverrideTransitionValidityCheck() || workItem.getStateDefinition().getOverrideAttributeValidationStates().contains( toStateDef); if (toStateDef.getStateType().isCancelledState()) { - validateTaskCompletion(results, workItem, toStateDef); + validateTaskCompletion(results, workItem, toStateDef, workItemService); validateReviewsCancelled(results, workItem, toStateDef); } else if (!toStateDef.getStateType().isCancelledState() && !isOverrideAttributeValidationState) { @@ -367,7 +367,7 @@ public class TransitionManager implements IAtsTransitionManager { } } - validateTaskCompletion(results, workItem, toStateDef); + validateTaskCompletion(results, workItem, toStateDef, workItemService); // Don't transition without targeted version if so configured boolean teamDefRequiresTargetedVersion = @@ -407,7 +407,10 @@ public class TransitionManager implements IAtsTransitionManager { } } - private void validateTaskCompletion(TransitionResults results, IAtsWorkItem workItem, IAtsStateDefinition toStateDef) throws OseeCoreException { + public static void validateTaskCompletion(TransitionResults results, IAtsWorkItem workItem, IAtsStateDefinition toStateDef, IAtsWorkItemService workItemService) throws OseeCoreException { + if (!workItem.isTeamWorkflow()) { + return; + } // Loop through this state's tasks to confirm complete boolean checkTasksCompletedForState = true; // Don't check for task completion if transition to working state and AllowTransitionWithoutTaskCompletion rule is set @@ -415,7 +418,7 @@ public class TransitionManager implements IAtsTransitionManager { RuleDefinitionOption.AllowTransitionWithoutTaskCompletion.name()) && toStateDef.getStateType().isWorkingState()) { checkTasksCompletedForState = false; } - if (checkTasksCompletedForState && workItem.isTeamWorkflow() && !workItem.getStateMgr().getStateType().isCompletedOrCancelled()) { + if (checkTasksCompletedForState && workItem.getStateMgr().getStateType().isInWork()) { Set<IAtsTask> tasksToCheck = new HashSet<>(); // If transitioning to completed/cancelled, all tasks must be completed/cancelled if (toStateDef.getStateType().isCompletedOrCancelledState()) { @@ -425,8 +428,8 @@ public class TransitionManager implements IAtsTransitionManager { else { tasksToCheck.addAll(workItemService.getTasks(workItem, workItem.getStateDefinition())); } - for (IAtsTask taskArt : tasksToCheck) { - if (taskArt.getStateMgr().getStateType().isInWork()) { + for (IAtsTask task : tasksToCheck) { + if (task.getStateMgr().getStateType().isInWork()) { results.addResult(workItem, TransitionResult.TASKS_NOT_COMPLETED); break; } diff --git a/plugins/org.eclipse.osee.ats.dsl.integration/src/org/eclipse/osee/ats/dsl/integration/internal/AtsWorkDefinitionServiceImpl.java b/plugins/org.eclipse.osee.ats.dsl.integration/src/org/eclipse/osee/ats/dsl/integration/internal/AtsWorkDefinitionServiceImpl.java index b120dff8bbd..2a6904ecedb 100644 --- a/plugins/org.eclipse.osee.ats.dsl.integration/src/org/eclipse/osee/ats/dsl/integration/internal/AtsWorkDefinitionServiceImpl.java +++ b/plugins/org.eclipse.osee.ats.dsl.integration/src/org/eclipse/osee/ats/dsl/integration/internal/AtsWorkDefinitionServiceImpl.java @@ -35,6 +35,7 @@ import org.eclipse.osee.ats.dsl.atsDsl.AtsDsl; import org.eclipse.osee.framework.core.util.XResultData; import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; import org.eclipse.osee.framework.jdk.core.type.Pair; +import org.eclipse.osee.framework.jdk.core.util.Conditions; import org.eclipse.osee.framework.jdk.core.util.Lib; import org.eclipse.osee.framework.jdk.core.util.Strings; import org.eclipse.osee.framework.jdk.core.util.io.StringOutputStream; @@ -113,7 +114,9 @@ public class AtsWorkDefinitionServiceImpl implements IAtsWorkDefinitionService { @Override public IAtsWorkDefinition getWorkDef(String workDefId, XResultData resultData) throws Exception { + Conditions.checkNotNullOrEmpty(workDefId, "workDefId"); String workDefStr = workDefStore.loadWorkDefinitionString(workDefId); + Conditions.checkNotNullOrEmpty(workDefStr, "workDefStr"); AtsDsl atsDsl = ModelUtil.loadModel(workDefId + ".ats", workDefStr); ConvertAtsDslToWorkDefinition convert = new ConvertAtsDslToWorkDefinition(workDefId, atsDsl, resultData, attrResolver, userService); diff --git a/plugins/org.eclipse.osee.ats.dsl.integration/src/org/eclipse/osee/ats/dsl/integration/internal/ConvertAtsDslToWorkDefinition.java b/plugins/org.eclipse.osee.ats.dsl.integration/src/org/eclipse/osee/ats/dsl/integration/internal/ConvertAtsDslToWorkDefinition.java index 20290432df7..532325acc66 100644 --- a/plugins/org.eclipse.osee.ats.dsl.integration/src/org/eclipse/osee/ats/dsl/integration/internal/ConvertAtsDslToWorkDefinition.java +++ b/plugins/org.eclipse.osee.ats.dsl.integration/src/org/eclipse/osee/ats/dsl/integration/internal/ConvertAtsDslToWorkDefinition.java @@ -213,8 +213,8 @@ public class ConvertAtsDslToWorkDefinition { try { blockType = ReviewBlockType.valueOf(dslBlockType); } catch (IllegalArgumentException ex) { - throw new IllegalArgumentException(String.format("Unknown ReviewBlockType [%s]; Defaulting to None", - dslBlockType)); + throw new IllegalArgumentException( + String.format("Unknown ReviewBlockType [%s]; Defaulting to None", dslBlockType)); } revDef.setBlockingType(blockType); @@ -223,8 +223,8 @@ public class ConvertAtsDslToWorkDefinition { try { eventType = StateEventType.valueOf(dslEventType); } catch (IllegalArgumentException ex) { - throw new IllegalArgumentException(String.format("Unknown StateEventType [%s]; Defaulting to None", - dslEventType)); + throw new IllegalArgumentException( + String.format("Unknown StateEventType [%s]; Defaulting to None", dslEventType)); } revDef.setStateEventType(eventType); revDef.setAutoTransitionToDecision(BooleanDefUtil.get(dslRevDef.getAutoTransitionToDecision(), false)); @@ -235,6 +235,7 @@ public class ConvertAtsDslToWorkDefinition { if (followupRef == null) { revOpt.setFollowupRequired(false); } else { + revOpt.setFollowupRequired(true); revOpt.getUserIds().addAll(UserRefUtil.getUserIds(followupRef.getAssigneeRefs())); revOpt.getUserNames().addAll(UserRefUtil.getUserNames(followupRef.getAssigneeRefs())); } @@ -268,8 +269,8 @@ public class ConvertAtsDslToWorkDefinition { String attributeName = Strings.unquote(attrWidget.getAttributeName()); try { if (!attrResolver.isAttributeNamed(attributeName)) { - resultData.errorf("Invalid attribute name [%s] in WorkDefinition [%s] (1)", - attributeName, SHEET_NAME); + resultData.errorf("Invalid attribute name [%s] in WorkDefinition [%s] (1)", attributeName, + SHEET_NAME); } else { WidgetDefinition widgetDef = new WidgetDefinition(attrResolver.getUnqualifiedName(attributeName)); widgetDef.setAttributeName(attributeName); @@ -278,8 +279,7 @@ public class ConvertAtsDslToWorkDefinition { stateItems.add(widgetDef); } } catch (Exception ex) { - resultData.errorf("Error resolving attribute [%s] to WorkDefinition in [%s]", attributeName, - SHEET_NAME); + resultData.errorf("Error resolving attribute [%s] to WorkDefinition in [%s]", attributeName, SHEET_NAME); } } else if (layoutItem instanceof Composite) { Composite composite = (Composite) layoutItem; @@ -382,7 +382,8 @@ public class ConvertAtsDslToWorkDefinition { widgetDef.setDescription(dslWidgetDef.getDescription()); } // Else, set if AtsAttributeTypes defines it - else if (Strings.isValid(attributeName) && attrResolver.isAttributeNamed(attributeName) && Strings.isValid(attrResolver.getDescription(attributeName))) { + else if (Strings.isValid(attributeName) && attrResolver.isAttributeNamed(attributeName) && Strings.isValid( + attrResolver.getDescription(attributeName))) { widgetDef.setDescription(attrResolver.getDescription(attributeName)); } } catch (Exception ex) { @@ -396,18 +397,17 @@ public class ConvertAtsDslToWorkDefinition { if (Strings.isValid(attributeName)) { try { if (!attrResolver.isAttributeNamed(attributeName)) { - resultData.errorf("Invalid attribute name [%s] in WorkDefinition [%s] (2)", - attributeName, SHEET_NAME); + resultData.errorf("Invalid attribute name [%s] in WorkDefinition [%s] (2)", attributeName, + SHEET_NAME); } else { attrResolver.setXWidgetNameBasedOnAttributeName(attributeName, widgetDef); } } catch (Exception ex) { - resultData.errorf("Error resolving attribute name [%s] in WorkDefinition [%s]", - attributeName, SHEET_NAME); + resultData.errorf("Error resolving attribute name [%s] in WorkDefinition [%s]", attributeName, + SHEET_NAME); } } else { - resultData.errorf("Invalid attribute name [%s] in WorkDefinition [%s] (3)", attributeName, - SHEET_NAME); + resultData.errorf("Invalid attribute name [%s] in WorkDefinition [%s] (3)", attributeName, SHEET_NAME); } } processMinMaxConstraints(widgetDef, dslWidgetDef.getMinConstraint(), dslWidgetDef.getMaxConstraint()); 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 d252866b433..9bab660b260 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 @@ -145,6 +145,7 @@ public class AtsServerImpl extends AtsCoreServiceImpl implements IAtsServer { private IAtsTaskService taskService; private volatile boolean emailEnabled = true; + private boolean loggedNotificationDisabled = false; private final List<IAtsNotifierServer> notifiers = new CopyOnWriteArrayList<>(); private final Map<String, IAtsDatabaseConversion> externalConversions = @@ -476,7 +477,10 @@ public class AtsServerImpl extends AtsCoreServiceImpl implements IAtsServer { public void sendNotifications(AtsNotificationCollector notifications) { if (isEmailEnabled()) { if (notifiers.isEmpty() || !isProduction()) { - logger.info("Osee Notification Disabled"); + if (!loggedNotificationDisabled) { + logger.info("Osee Notification Disabled"); + loggedNotificationDisabled = true; + } } else { workItemNotificationProcessor = new WorkItemNotificationProcessor(logger, this, workItemFactory, userService, attributeResolverService); @@ -599,7 +603,7 @@ public class AtsServerImpl extends AtsCoreServiceImpl implements IAtsServer { } @Override - public ArtifactReadable getArtifactByName(IArtifactType artifactType, String name) { + public ArtifactId getArtifactByName(IArtifactType artifactType, String name) { return orcsApi.getQueryFactory().fromBranch(AtsUtilCore.getAtsBranch()).andIsOfType(artifactType).andNameEquals( name).getResults().getAtMostOneOrNull(); } diff --git a/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/util/AtsChangeSet.java b/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/util/AtsChangeSet.java index c2a90f62b18..1c17773483e 100644 --- a/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/util/AtsChangeSet.java +++ b/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/util/AtsChangeSet.java @@ -298,4 +298,5 @@ public class AtsChangeSet extends AbstractAtsChangeSet { getTransaction().setSoleAttributeValue(art, attrType, value); add(art); } + } diff --git a/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/workitem/AtsTaskService.java b/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/workitem/AtsTaskService.java index a16627480ee..f25b79a24b9 100644 --- a/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/workitem/AtsTaskService.java +++ b/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/workitem/AtsTaskService.java @@ -18,6 +18,7 @@ import java.util.Map; import org.eclipse.osee.ats.api.task.AbstractAtsTaskService; import org.eclipse.osee.ats.api.task.JaxAtsTask; import org.eclipse.osee.ats.api.task.NewTaskData; +import org.eclipse.osee.ats.api.task.NewTaskDatas; import org.eclipse.osee.ats.api.user.IAtsUser; import org.eclipse.osee.ats.api.util.IAtsChangeSet; import org.eclipse.osee.ats.api.workflow.IAtsTask; @@ -50,11 +51,26 @@ public class AtsTaskService extends AbstractAtsTaskService { public Collection<IAtsTask> createTasks(NewTaskData newTaskData, IAtsChangeSet changes) { CreateTasksOperation operation = new CreateTasksOperation(newTaskData, atsServer, new XResultData()); XResultData results = operation.validate(); + operation.run(changes); + if (results.isErrors()) { + throw new OseeStateException("Error creating tasks - " + results.toString()); + } + List<IAtsTask> tasks = new LinkedList<>(); + for (JaxAtsTask task : operation.getTasks()) { + tasks.add(atsServer.getWorkItemFactory().getTask(atsServer.getArtifactByUuid(task.getUuid()))); + } + return tasks; + } + + @Override + public Collection<IAtsTask> createTasks(NewTaskDatas newTaskDatas) { + CreateTasksOperation operation = new CreateTasksOperation(newTaskDatas, atsServer, new XResultData()); + XResultData results = operation.validate(); if (results.isErrors()) { throw new OseeStateException("Error validating task creation - " + results.toString()); } - operation.run(changes); + operation.run(); if (results.isErrors()) { throw new OseeStateException("Error creating tasks - " + results.toString()); } diff --git a/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/workitem/CreateTasksOperation.java b/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/workitem/CreateTasksOperation.java index 7695ee5c322..804e18b94a6 100644 --- a/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/workitem/CreateTasksOperation.java +++ b/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/workitem/CreateTasksOperation.java @@ -13,8 +13,10 @@ package org.eclipse.osee.ats.impl.workitem; import java.util.ArrayList; import java.util.Collection; import java.util.Date; +import java.util.HashMap; import java.util.LinkedList; import java.util.List; +import java.util.Map; import org.eclipse.osee.ats.api.IAtsWorkItem; import org.eclipse.osee.ats.api.data.AtsArtifactTypes; import org.eclipse.osee.ats.api.data.AtsAttributeTypes; @@ -22,11 +24,13 @@ import org.eclipse.osee.ats.api.data.AtsRelationTypes; import org.eclipse.osee.ats.api.task.JaxAtsTask; import org.eclipse.osee.ats.api.task.JaxAttribute; import org.eclipse.osee.ats.api.task.NewTaskData; +import org.eclipse.osee.ats.api.task.NewTaskDatas; import org.eclipse.osee.ats.api.user.IAtsUser; import org.eclipse.osee.ats.api.util.IAtsChangeSet; import org.eclipse.osee.ats.api.workdef.IAtsWorkDefinition; import org.eclipse.osee.ats.api.workflow.IAtsTask; import org.eclipse.osee.ats.api.workflow.IAtsTeamWorkflow; +import org.eclipse.osee.ats.core.users.AtsCoreUsers; import org.eclipse.osee.ats.core.util.AtsUtilCore; import org.eclipse.osee.ats.impl.IAtsServer; import org.eclipse.osee.framework.core.data.ArtifactId; @@ -45,16 +49,22 @@ import org.eclipse.osee.orcs.data.ArtifactReadable; public class CreateTasksOperation { private XResultData resultData; - private final NewTaskData newTaskData; + private final NewTaskDatas newTaskDatas; private final IAtsServer atsServer; - private ArtifactReadable teamWfArt; private IAtsUser asUser; private final List<JaxAtsTask> tasks = new ArrayList<>(); - private IAtsTeamWorkflow teamWf; private Date createdByDate; + private Map<Long, IAtsTeamWorkflow> uuidToTeamWf; public CreateTasksOperation(NewTaskData newTaskData, IAtsServer atsServer, XResultData resultData) { - this.newTaskData = newTaskData; + newTaskDatas = new NewTaskDatas(); + newTaskDatas.add(newTaskData); + this.atsServer = atsServer; + this.resultData = resultData; + } + + public CreateTasksOperation(NewTaskDatas newTaskDatas, IAtsServer atsServer, XResultData resultData) { + this.newTaskDatas = newTaskDatas; this.atsServer = atsServer; this.resultData = resultData; } @@ -63,93 +73,96 @@ public class CreateTasksOperation { if (resultData == null) { resultData = new XResultData(false); } - Long teamWfUuid = newTaskData.getTeamWfUuid(); - if (teamWfUuid == null) { - resultData.error("Team Workflow uuid not specified"); - } - teamWfArt = atsServer.getArtifactByUuid(teamWfUuid); - if (teamWfArt == null) { - resultData.errorf("Team Workflow uuid %d does not exist", teamWfUuid); - } - teamWf = atsServer.getWorkItemFactory().getTeamWf(teamWfArt); - String asUserId = newTaskData.getAsUserId(); - if (asUserId == null) { - resultData.error("As User Id uuid not specified"); - } - asUser = atsServer.getUserService().getUserById(asUserId); - if (asUser == null) { - resultData.errorf("As User Id uuid %d does not exist", asUserId); - } - if (!Strings.isValid(newTaskData.getCommitComment())) { - resultData.errorf("Inavlidate Commit Comment [%s]", newTaskData.getCommitComment()); - } - - for (JaxAtsTask task : newTaskData.getNewTasks()) { - Long taskUuid = task.getUuid(); - if (teamWfUuid != null && taskUuid > 0L) { - ArtifactReadable taskArt = atsServer.getArtifactByUuid(taskUuid); - if (taskArt != null) { - resultData.errorf("Task with uuid %d already exists for %s", taskUuid, task); - } + uuidToTeamWf = new HashMap<>(); + for (NewTaskData newTaskData : newTaskDatas.getTaskDatas()) { + Long teamWfUuid = newTaskData.getTeamWfUuid(); + if (teamWfUuid == null) { + resultData.error("Team Workflow uuid not specified"); } - if (!Strings.isValid(task.getName())) { - resultData.errorf("Task name [%s] is invalid for %s", task.getName(), task); + ArtifactReadable teamWfArt = atsServer.getArtifactByUuid(teamWfUuid); + if (teamWfArt == null) { + resultData.errorf("Team Workflow uuid %d does not exist", teamWfUuid); } - IAtsUser createdBy = atsServer.getUserService().getUserById(task.getCreatedByUserId()); - if (createdBy == null) { - resultData.errorf("Task Created By user id %d does not exist in %s", createdBy, task); + IAtsTeamWorkflow teamWf = uuidToTeamWf.get(teamWfUuid); + if (teamWf == null) { + teamWf = atsServer.getWorkItemFactory().getTeamWf(teamWfArt); + uuidToTeamWf.put(teamWfUuid, teamWf); } - createdByDate = task.getCreatedDate(); - if (createdByDate == null) { - resultData.errorf("Task Created By Date %s does not exist in %s", createdByDate, task); + String asUserId = newTaskData.getAsUserId(); + if (asUserId == null) { + resultData.error("As User Id uuid not specified"); } - IAtsTeamWorkflow teamWorkflow = atsServer.getWorkItemFactory().getTeamWf(teamWfArt); - String relatedToState = task.getRelatedToState(); - if (Strings.isValid(relatedToState)) { - if (teamWorkflow.getWorkDefinition().getStateByName(relatedToState) == null) { - resultData.errorf("Task Related To State %s invalid for Team Workflow %d", relatedToState, teamWfUuid); - } - } - List<String> assigneeUserIds = task.getAssigneeUserIds(); - if (assigneeUserIds == null || assigneeUserIds.isEmpty()) { - resultData.errorf("Task Assignees can not be empty in %s", createdByDate, task); + asUser = atsServer.getUserService().getUserById(asUserId); + if (asUser == null) { + resultData.errorf("As User Id uuid %d does not exist", asUserId); } - if (assigneeUserIds == null) { - resultData.errorf("Task Assignees must be specified in %s", createdByDate, task); + if (!Strings.isValid(newTaskData.getCommitComment())) { + resultData.errorf("Inavlidate Commit Comment [%s]", newTaskData.getCommitComment()); } - Collection<IAtsUser> assignees = atsServer.getUserService().getUsersByUserIds(assigneeUserIds); - if (assigneeUserIds.size() != assignees.size()) { - resultData.errorf("Task Assignees [%s] not all valid in %s", String.valueOf(assigneeUserIds), task); - } + for (JaxAtsTask task : newTaskData.getNewTasks()) { + Long taskUuid = task.getUuid(); + if (teamWfUuid != null && taskUuid > 0L) { + ArtifactReadable taskArt = atsServer.getArtifactByUuid(taskUuid); + if (taskArt != null) { + resultData.errorf("Task with uuid %d already exists for %s", taskUuid, task); + } + } + if (!Strings.isValid(task.getName())) { + resultData.errorf("Task name [%s] is invalid for %s", task.getName(), task); + } + IAtsUser createdBy = atsServer.getUserService().getUserById(task.getCreatedByUserId()); + if (createdBy == null) { + resultData.errorf("Task Created By user id %d does not exist in %s", createdBy, task); + } + createdByDate = task.getCreatedDate(); + if (createdByDate == null) { + resultData.errorf("Task Created By Date %s does not exist in %s", createdByDate, task); + } + IAtsTeamWorkflow teamWorkflow = atsServer.getWorkItemFactory().getTeamWf(teamWfArt); + String relatedToState = task.getRelatedToState(); + if (Strings.isValid(relatedToState)) { + if (teamWorkflow.getWorkDefinition().getStateByName(relatedToState) == null) { + resultData.errorf("Task Related To State %s invalid for Team Workflow %d", relatedToState, + teamWfUuid); + } + } - IAtsWorkDefinition workDefinition = null; - if (Strings.isValid(task.getTaskWorkDef())) { - try { - XResultData rd = new XResultData(); - workDefinition = atsServer.getWorkDefService().getWorkDef(task.getTaskWorkDef(), rd); - if (rd.isErrors()) { - resultData.errorf("Error finding Task Work Def [%s]. Exception: %s", task.getTaskWorkDef(), - rd.toString()); + List<String> assigneeUserIds = task.getAssigneeUserIds(); + if (!assigneeUserIds.isEmpty()) { + Collection<IAtsUser> assignees = atsServer.getUserService().getUsersByUserIds(assigneeUserIds); + if (assigneeUserIds.size() != assignees.size()) { + resultData.errorf("Task Assignees [%s] not all valid in %s", String.valueOf(assigneeUserIds), task); } - } catch (Exception ex) { - resultData.errorf("Exception finding Task Work Def [%s]. Exception: %s", task.getTaskWorkDef(), - ex.getMessage()); } - if (workDefinition == null) { - resultData.errorf("Task Work Def [%s] does not exist", task.getTaskWorkDef()); + + IAtsWorkDefinition workDefinition = null; + if (Strings.isValid(task.getTaskWorkDef())) { + try { + XResultData rd = new XResultData(); + workDefinition = atsServer.getWorkDefService().getWorkDef(task.getTaskWorkDef(), rd); + if (rd.isErrors()) { + resultData.errorf("Error finding Task Work Def [%s]. Exception: %s", task.getTaskWorkDef(), + rd.toString()); + } + } catch (Exception ex) { + resultData.errorf("Exception finding Task Work Def [%s]. Exception: %s", task.getTaskWorkDef(), + ex.getMessage()); + } + if (workDefinition == null) { + resultData.errorf("Task Work Def [%s] does not exist", task.getTaskWorkDef()); + } } - } - for (JaxAttribute attribute : task.getAttributes()) { - IAttributeType attrType = getAttributeType(atsServer, attribute.getAttrTypeName()); - if (attrType == null) { - resultData.errorf("Attribute Type [%s] not valid for Task creation in %s", attribute.getAttrTypeName(), - task); + for (JaxAttribute attribute : task.getAttributes()) { + IAttributeType attrType = getAttributeType(atsServer, attribute.getAttrTypeName()); + if (attrType == null) { + resultData.errorf("Attribute Type [%s] not valid for Task creation in %s", + attribute.getAttrTypeName(), task); + } } } } - return resultData; } @@ -173,16 +186,19 @@ public class CreateTasksOperation { throw new OseeArgumentException(results.toString()); } - IAtsChangeSet changes = atsServer.getStoreService().createAtsChangeSet(newTaskData.getCommitComment(), asUser); + IAtsChangeSet changes = atsServer.getStoreService().createAtsChangeSet( + newTaskDatas.getTaskDatas().iterator().next().getCommitComment(), asUser); run(changes); changes.execute(); - for (JaxAtsTask jaxTask : newTaskData.getNewTasks()) { - JaxAtsTask newJaxTask = createNewJaxTask(jaxTask.getUuid(), atsServer); - if (newJaxTask == null) { - throw new OseeStateException("Unable to create return New Task for uuid " + jaxTask.getUuid()); + for (NewTaskData newTaskData : newTaskDatas.getTaskDatas()) { + for (JaxAtsTask jaxTask : newTaskData.getNewTasks()) { + JaxAtsTask newJaxTask = createNewJaxTask(jaxTask.getUuid(), atsServer); + if (newJaxTask == null) { + throw new OseeStateException("Unable to create return New Task for uuid " + jaxTask.getUuid()); + } + this.tasks.add(newJaxTask); } - this.tasks.add(newJaxTask); } } @@ -194,56 +210,61 @@ public class CreateTasksOperation { } private void createTasks(IAtsChangeSet changes) { - for (JaxAtsTask jaxTask : newTaskData.getNewTasks()) { + for (NewTaskData newTaskData : newTaskDatas.getTaskDatas()) { + for (JaxAtsTask jaxTask : newTaskData.getNewTasks()) { - Long uuid = jaxTask.getUuid(); - if (uuid <= 0L) { - uuid = Lib.generateArtifactIdAsInt(); - jaxTask.setUuid(uuid); - } - ArtifactId taskArt = changes.createArtifact(AtsArtifactTypes.Task, jaxTask.getName(), GUID.create(), uuid); - IAtsTask task = atsServer.getWorkItemFactory().getTask(taskArt); - - atsServer.getUtilService().setAtsId(atsServer.getSequenceProvider(), task, teamWf.getTeamDefinition(), - changes); - - changes.relate(teamWf, AtsRelationTypes.TeamWfToTask_Task, taskArt); + Long uuid = jaxTask.getUuid(); + if (uuid <= 0L) { + uuid = Lib.generateArtifactIdAsInt(); + jaxTask.setUuid(uuid); + } + ArtifactId taskArt = changes.createArtifact(AtsArtifactTypes.Task, jaxTask.getName(), GUID.create(), uuid); + IAtsTask task = atsServer.getWorkItemFactory().getTask(taskArt); - List<IAtsUser> assignees = new ArrayList<>(); - if (jaxTask.getAssigneeUserIds() != null) { - assignees.addAll(atsServer.getUserService().getUsersByUserIds(jaxTask.getAssigneeUserIds())); - } + IAtsTeamWorkflow teamWf = uuidToTeamWf.get(newTaskData.getTeamWfUuid()); + atsServer.getUtilService().setAtsId(atsServer.getSequenceProvider(), task, teamWf.getTeamDefinition(), + changes); + changes.relate(teamWf, AtsRelationTypes.TeamWfToTask_Task, taskArt); - IAtsWorkDefinition workDefinition = null; - if (Strings.isValid(jaxTask.getTaskWorkDef())) { - try { - workDefinition = atsServer.getWorkDefService().getWorkDef(jaxTask.getTaskWorkDef(), new XResultData()); - } catch (Exception ex) { - throw new OseeArgumentException("Exception finding Task Work Def [%s]", jaxTask.getTaskWorkDef(), ex); + List<IAtsUser> assignees = new ArrayList<>(); + if (jaxTask.getAssigneeUserIds() != null) { + assignees.addAll(atsServer.getUserService().getUsersByUserIds(jaxTask.getAssigneeUserIds())); + } + if (assignees.isEmpty()) { + assignees.add(AtsCoreUsers.UNASSIGNED_USER); } - } - if (Strings.isValid(jaxTask.getDescription())) { - changes.setSoleAttributeValue(task, AtsAttributeTypes.Description, jaxTask.getDescription()); - } - atsServer.getActionFactory().initializeNewStateMachine(task, assignees, createdByDate, asUser, workDefinition, - changes); - // Set parent state task is related to if set - if (Strings.isValid(jaxTask.getRelatedToState())) { - changes.setSoleAttributeValue(task, AtsAttributeTypes.RelatedToState, jaxTask.getRelatedToState()); - } + IAtsWorkDefinition workDefinition = null; + if (Strings.isValid(jaxTask.getTaskWorkDef())) { + try { + workDefinition = + atsServer.getWorkDefService().getWorkDef(jaxTask.getTaskWorkDef(), new XResultData()); + } catch (Exception ex) { + throw new OseeArgumentException("Exception finding Task Work Def [%s]", jaxTask.getTaskWorkDef(), ex); + } + } + if (Strings.isValid(jaxTask.getDescription())) { + changes.setSoleAttributeValue(task, AtsAttributeTypes.Description, jaxTask.getDescription()); + } + atsServer.getActionFactory().initializeNewStateMachine(task, assignees, createdByDate, asUser, + workDefinition, changes); - for (JaxAttribute attribute : jaxTask.getAttributes()) { - IAttributeType attrType = getAttributeType(atsServer, attribute.getAttrTypeName()); - if (attrType == null) { - resultData.errorf("Attribute Type [%s] not valid for Task creation in %s", attribute.getAttrTypeName(), - task); + // Set parent state task is related to if set + if (Strings.isValid(jaxTask.getRelatedToState())) { + changes.setSoleAttributeValue(task, AtsAttributeTypes.RelatedToState, jaxTask.getRelatedToState()); } - changes.setValues(task, attrType, attribute.getValues()); - } - changes.add(taskArt); + for (JaxAttribute attribute : jaxTask.getAttributes()) { + IAttributeType attrType = getAttributeType(atsServer, attribute.getAttrTypeName()); + if (attrType == null) { + resultData.errorf("Attribute Type [%s] not valid for Task creation in %s", + attribute.getAttrTypeName(), task); + } + changes.setValues(task, attrType, attribute.getValues()); + } + changes.add(taskArt); + } } } diff --git a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/workitem/AtsTaskEndpointImpl.java b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/workitem/AtsTaskEndpointImpl.java index 2a3d9e94599..2ce7d12f974 100644 --- a/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/workitem/AtsTaskEndpointImpl.java +++ b/plugins/org.eclipse.osee.ats.rest/src/org/eclipse/osee/ats/rest/internal/workitem/AtsTaskEndpointImpl.java @@ -10,12 +10,17 @@ *******************************************************************************/ package org.eclipse.osee.ats.rest.internal.workitem; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.POST; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import org.eclipse.osee.ats.api.IAtsWorkItem; import org.eclipse.osee.ats.api.task.AtsTaskEndpointApi; import org.eclipse.osee.ats.api.task.JaxAtsTask; import org.eclipse.osee.ats.api.task.JaxAtsTasks; -import org.eclipse.osee.ats.api.task.NewTaskData; +import org.eclipse.osee.ats.api.task.NewTaskDatas; import org.eclipse.osee.ats.api.util.IAtsChangeSet; import org.eclipse.osee.ats.api.workflow.IAtsTask; import org.eclipse.osee.ats.core.users.AtsCoreUsers; @@ -35,9 +40,12 @@ public class AtsTaskEndpointImpl implements AtsTaskEndpointApi { this.atsServer = atsServer; } + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) @Override - public Response create(NewTaskData newTaskData) { - CreateTasksOperation operation = new CreateTasksOperation(newTaskData, atsServer, new XResultData()); + public Response create(NewTaskDatas newTaskDatas) { + CreateTasksOperation operation = new CreateTasksOperation(newTaskDatas, atsServer, new XResultData()); XResultData results = operation.validate(); if (results.isErrors()) { @@ -49,6 +57,7 @@ public class AtsTaskEndpointImpl implements AtsTaskEndpointApi { return Response.ok().entity(tasks).build(); } + @POST @Override public Response get(long taskUuid) { IAtsWorkItem task = atsServer.getQueryService().createQuery().isOfType(IAtsTask.class).andUuids( @@ -60,6 +69,7 @@ public class AtsTaskEndpointImpl implements AtsTaskEndpointApi { return Response.ok().entity(jaxAtsTask).build(); } + @DELETE @Override public void delete(long taskUuid) { IAtsWorkItem task = atsServer.getQueryService().createQuery().isOfType(IAtsTask.class).andUuids( diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/internal/AtsOseeCmService.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/internal/AtsOseeCmService.java index 45f09d73a07..353d92493e6 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/internal/AtsOseeCmService.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/internal/AtsOseeCmService.java @@ -21,11 +21,14 @@ import org.eclipse.osee.ats.AtsImage; import org.eclipse.osee.ats.actions.wizard.NewActionJob; import org.eclipse.osee.ats.api.ai.IAtsActionableItem; import org.eclipse.osee.ats.api.data.AtsArtifactTypes; +import org.eclipse.osee.ats.api.task.JaxAtsTaskFactory; +import org.eclipse.osee.ats.api.task.NewTaskData; +import org.eclipse.osee.ats.api.task.NewTaskDataFactory; +import org.eclipse.osee.ats.api.task.NewTaskDatas; import org.eclipse.osee.ats.api.team.ChangeType; import org.eclipse.osee.ats.core.client.search.AtsArtifactQuery; import org.eclipse.osee.ats.core.client.task.AbstractTaskableArtifact; import org.eclipse.osee.ats.core.client.team.TeamWorkFlowArtifact; -import org.eclipse.osee.ats.core.client.util.AtsChangeSet; import org.eclipse.osee.ats.core.client.util.AtsUtilClient; import org.eclipse.osee.ats.core.client.workflow.AbstractWorkflowArtifact; import org.eclipse.osee.ats.core.config.ActionableItems; @@ -128,12 +131,12 @@ public class AtsOseeCmService implements IOseeCmService { public Artifact createWorkTask(String name, String parentPcrGuid) { try { Artifact artifact = AtsArtifactQuery.getArtifactFromId(parentPcrGuid); - AtsChangeSet changes = new AtsChangeSet(getClass().getSimpleName() + " - Create Work Task"); - if (artifact instanceof AbstractTaskableArtifact) { - return ((AbstractTaskableArtifact) artifact).createNewTask(name, new Date(), - AtsClientService.get().getUserService().getCurrentUser(), changes); - } - changes.execute(); + Date createdDate = new Date(); + NewTaskData newTaskData = NewTaskDataFactory.get(getClass().getSimpleName() + " - Create Work Task", + AtsClientService.get().getUserService().getCurrentUser().getUserId(), artifact.getUuid()); + JaxAtsTaskFactory.get(newTaskData, name, AtsClientService.get().getUserService().getCurrentUser(), + createdDate); + AtsClientService.getTaskEp().create(new NewTaskDatas(newTaskData)); } catch (OseeCoreException ex) { OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex); } @@ -167,9 +170,8 @@ public class AtsOseeCmService implements IOseeCmService { boolean toReturn = false; if (art instanceof TeamWorkFlowArtifact) { try { - toReturn = - AtsClientService.get().getBranchService().isBranchesAllCommittedExcept((TeamWorkFlowArtifact) art, - branch); + toReturn = AtsClientService.get().getBranchService().isBranchesAllCommittedExcept( + (TeamWorkFlowArtifact) art, branch); } catch (OseeCoreException ex) { OseeLog.log(Activator.class, Level.SEVERE, ex.toString(), ex); toReturn = false; diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/operation/ImportTasksFromSpreadsheet.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/operation/ImportTasksFromSpreadsheet.java index bdbb5ba731f..3070a9fc922 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/operation/ImportTasksFromSpreadsheet.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/operation/ImportTasksFromSpreadsheet.java @@ -17,10 +17,14 @@ import java.util.List; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.osee.ats.api.data.AtsArtifactTypes; +import org.eclipse.osee.ats.api.task.NewTaskData; +import org.eclipse.osee.ats.api.task.NewTaskDataFactory; +import org.eclipse.osee.ats.api.task.NewTaskDatas; import org.eclipse.osee.ats.core.client.task.AbstractTaskableArtifact; import org.eclipse.osee.ats.core.client.team.TeamWorkFlowArtifact; -import org.eclipse.osee.ats.core.client.util.AtsChangeSet; +import org.eclipse.osee.ats.core.client.util.AtsUtilClient; import org.eclipse.osee.ats.editor.SMAEditor; +import org.eclipse.osee.ats.internal.AtsClientService; import org.eclipse.osee.ats.util.Import.ExcelAtsTaskArtifactExtractor; import org.eclipse.osee.ats.util.Import.TaskImportJob; import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; @@ -66,7 +70,8 @@ public class ImportTasksFromSpreadsheet extends AbstractBlam { StringBuffer buffer = new StringBuffer("<xWidgets>"); buffer.append("<XWidget xwidgetType=\"XListDropViewer\" displayName=\"" + TEAM_WORKFLOW + "\" />"); buffer.append("<XWidget xwidgetType=\"XFileSelectionDialog\" displayName=\"" + TASK_IMPORT_SPREADSHEET + "\" />"); - buffer.append("<XWidget xwidgetType=\"XCheckBox\" displayName=\"" + EMAIL_POCS + "\" labelAfter=\"true\" horizontalLabel=\"true\"/>"); + buffer.append( + "<XWidget xwidgetType=\"XCheckBox\" displayName=\"" + EMAIL_POCS + "\" labelAfter=\"true\" horizontalLabel=\"true\"/>"); buffer.append("</xWidgets>"); return buffer.toString(); } @@ -119,15 +124,21 @@ public class ImportTasksFromSpreadsheet extends AbstractBlam { } File file = new File(filename); try { - AtsChangeSet changes = new AtsChangeSet("Import Tasks from Spreadsheet"); - Job job = - Jobs.startJob(new TaskImportJob(file, new ExcelAtsTaskArtifactExtractor( - (TeamWorkFlowArtifact) artifact, emailPocs, changes))); + + AtsUtilClient.setEmailEnabled(emailPocs); + NewTaskData newTaskData = NewTaskDataFactory.get("Import Tasks from Spreadsheet", + AtsClientService.get().getUserService().getCurrentUser(), (TeamWorkFlowArtifact) artifact); + + Job job = Jobs.startJob(new TaskImportJob(file, + new ExcelAtsTaskArtifactExtractor((TeamWorkFlowArtifact) artifact, newTaskData))); job.join(); - changes.execute(); + + AtsClientService.get().getTaskService().createTasks(new NewTaskDatas(newTaskData)); } catch (Exception ex) { log(ex); return; + } finally { + AtsUtilClient.setEmailEnabled(true); } SMAEditor.editArtifact(artifact); diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/task/TaskComposite.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/task/TaskComposite.java index 67744535453..042f69105ed 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/task/TaskComposite.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/task/TaskComposite.java @@ -26,12 +26,16 @@ import org.eclipse.osee.ats.actions.OpenNewAtsTaskEditorAction.IOpenNewAtsTaskEd import org.eclipse.osee.ats.actions.OpenNewAtsTaskEditorSelected.IOpenNewAtsTaskEditorSelectedHandler; import org.eclipse.osee.ats.actions.TaskAddAction.ITaskAddActionHandler; import org.eclipse.osee.ats.api.data.AtsArtifactTypes; +import org.eclipse.osee.ats.api.task.JaxAtsTask; +import org.eclipse.osee.ats.api.task.JaxAtsTaskFactory; +import org.eclipse.osee.ats.api.task.NewTaskData; +import org.eclipse.osee.ats.api.task.NewTaskDataFactory; +import org.eclipse.osee.ats.api.task.NewTaskDatas; import org.eclipse.osee.ats.column.RelatedToStateColumn; import org.eclipse.osee.ats.core.client.task.AbstractTaskableArtifact; import org.eclipse.osee.ats.core.client.task.TaskArtifact; import org.eclipse.osee.ats.core.client.task.TaskManager; import org.eclipse.osee.ats.core.client.team.TeamWorkFlowArtifact; -import org.eclipse.osee.ats.core.client.util.AtsChangeSet; import org.eclipse.osee.ats.core.client.util.AtsTaskCache; import org.eclipse.osee.ats.editor.SMAEditor; import org.eclipse.osee.ats.internal.Activator; @@ -42,6 +46,7 @@ import org.eclipse.osee.ats.world.WorldLabelProvider; import org.eclipse.osee.ats.world.WorldXViewer; import org.eclipse.osee.ats.world.WorldXViewerEventManager; import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; +import org.eclipse.osee.framework.jdk.core.util.Strings; import org.eclipse.osee.framework.logging.OseeLevel; import org.eclipse.osee.framework.logging.OseeLog; import org.eclipse.osee.framework.skynet.core.artifact.Artifact; @@ -167,10 +172,16 @@ public class TaskComposite extends Composite implements IWorldViewerEventHandler RelatedToStateColumn.getValidInWorkStates((TeamWorkFlowArtifact) iXTaskViewer.getAwa()); ed.setOptions(validStates); if (ed.open() == 0) { - AtsChangeSet changes = new AtsChangeSet("Create New Task"); - taskArt = ((AbstractTaskableArtifact) iXTaskViewer.getAwa()).createNewTask(ed.getEntry(), new Date(), - AtsClientService.get().getUserService().getCurrentUser(), ed.getSelection(), changes); - changes.execute(); + NewTaskData newTaskData = NewTaskDataFactory.get("Create New Task", + AtsClientService.get().getUserService().getCurrentUser().getUserId(), iXTaskViewer.getAwa().getUuid()); + JaxAtsTask task = JaxAtsTaskFactory.get(newTaskData, ed.getEntry(), + AtsClientService.get().getUserService().getCurrentUser(), new Date()); + if (Strings.isValid(ed.getSelection())) { + task.setRelatedToState(ed.getSelection()); + } + AtsClientService.get().getTaskService().createTasks(new NewTaskDatas(newTaskData)); + + taskArt = (TaskArtifact) AtsClientService.get().getArtifact(task.getUuid()); AtsTaskCache.decache((AbstractTaskableArtifact) iXTaskViewer.getAwa()); } } catch (Exception ex) { diff --git a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/Import/ExcelAtsTaskArtifactExtractor.java b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/Import/ExcelAtsTaskArtifactExtractor.java index d272a126977..8c6d2b21d0c 100644 --- a/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/Import/ExcelAtsTaskArtifactExtractor.java +++ b/plugins/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/Import/ExcelAtsTaskArtifactExtractor.java @@ -15,33 +15,25 @@ import java.io.FileFilter; import java.io.InputStreamReader; import java.net.URI; import java.util.Date; -import java.util.HashSet; -import java.util.Set; import java.util.logging.Level; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.osee.ats.api.data.AtsAttributeTypes; -import org.eclipse.osee.ats.api.notify.AtsNotificationEventFactory; -import org.eclipse.osee.ats.api.notify.AtsNotifyType; +import org.eclipse.osee.ats.api.task.JaxAtsTask; +import org.eclipse.osee.ats.api.task.JaxAtsTaskFactory; +import org.eclipse.osee.ats.api.task.NewTaskData; import org.eclipse.osee.ats.api.user.IAtsUser; -import org.eclipse.osee.ats.api.util.IAtsChangeSet; -import org.eclipse.osee.ats.core.client.task.AbstractTaskableArtifact; -import org.eclipse.osee.ats.core.client.task.TaskArtifact; -import org.eclipse.osee.ats.core.client.task.TaskManager; import org.eclipse.osee.ats.core.client.team.TeamWorkFlowArtifact; -import org.eclipse.osee.ats.core.client.util.AtsUtilClient; import org.eclipse.osee.ats.core.client.workflow.AbstractWorkflowArtifact; import org.eclipse.osee.ats.internal.Activator; import org.eclipse.osee.ats.internal.AtsClientService; import org.eclipse.osee.framework.core.exception.OseeExceptions; -import org.eclipse.osee.framework.core.util.Result; import org.eclipse.osee.framework.jdk.core.type.OseeArgumentException; import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; import org.eclipse.osee.framework.jdk.core.util.Strings; import org.eclipse.osee.framework.jdk.core.util.io.xml.ExcelSaxHandler; import org.eclipse.osee.framework.jdk.core.util.io.xml.RowProcessor; import org.eclipse.osee.framework.logging.OseeLog; -import org.eclipse.osee.framework.ui.plugin.util.AWorkbench; import org.xml.sax.InputSource; import org.xml.sax.XMLReader; import org.xml.sax.helpers.XMLReaderFactory; @@ -52,14 +44,11 @@ import org.xml.sax.helpers.XMLReaderFactory; public class ExcelAtsTaskArtifactExtractor { private final AbstractWorkflowArtifact sma; - private final boolean emailPOCs; - private final IAtsChangeSet changes; - private IProgressMonitor monitor; + private final NewTaskData newTaskData; - public ExcelAtsTaskArtifactExtractor(TeamWorkFlowArtifact artifact, boolean emailPOCs, IAtsChangeSet changes) { - this.emailPOCs = emailPOCs; - this.changes = changes; + public ExcelAtsTaskArtifactExtractor(TeamWorkFlowArtifact artifact, NewTaskData newTaskData) { + this.newTaskData = newTaskData; this.sma = artifact; } @@ -70,8 +59,7 @@ public class ExcelAtsTaskArtifactExtractor { if (monitor == null) { monitor = new NullProgressMonitor(); } - xmlReader.setContentHandler(new ExcelSaxHandler(new InternalRowProcessor(monitor, changes, sma, emailPOCs), - true)); + xmlReader.setContentHandler(new ExcelSaxHandler(new InternalRowProcessor(monitor, newTaskData, sma), true)); xmlReader.parse(new InputSource(new InputStreamReader(source.toURL().openStream(), "UTF-8"))); } catch (Exception ex) { OseeExceptions.wrapAndThrow(ex); @@ -103,15 +91,13 @@ public class ExcelAtsTaskArtifactExtractor { private int rowNum; private final IProgressMonitor monitor; private final AbstractWorkflowArtifact sma; - private final IAtsChangeSet changes; - private final boolean emailPOCs; private final Date createdDate; private final IAtsUser createdBy; + private final NewTaskData newTaskData; - protected InternalRowProcessor(IProgressMonitor monitor, IAtsChangeSet changes, AbstractWorkflowArtifact sma, boolean emailPOCs) throws OseeCoreException { + protected InternalRowProcessor(IProgressMonitor monitor, NewTaskData newTaskData, AbstractWorkflowArtifact sma) throws OseeCoreException { this.monitor = monitor; - this.changes = changes; - this.emailPOCs = emailPOCs; + this.newTaskData = newTaskData; this.sma = sma; createdDate = new Date(); createdBy = AtsClientService.get().getUserService().getCurrentUser(); @@ -151,60 +137,38 @@ public class ExcelAtsTaskArtifactExtractor { public void processRow(String[] row) throws OseeCoreException { rowNum++; monitor.setTaskName("Processing Row " + rowNum); - TaskArtifact taskArt = - ((AbstractTaskableArtifact) sma).createNewTask("", createdDate, createdBy, null, changes); + JaxAtsTask task = JaxAtsTaskFactory.get(newTaskData, "", createdBy, createdDate); monitor.subTask("Validating..."); boolean valid = validateRow(row); if (!valid) { return; } - AtsUtilClient.setEmailEnabled(false); for (int i = 0; i < row.length; i++) { if (headerRow[i] == null) { OseeLog.log(Activator.class, Level.SEVERE, "Null header column => " + i); - } else if (headerRow[i].equalsIgnoreCase("Originator")) { - processOriginator(row, taskArt, i); } else if (headerRow[i].equalsIgnoreCase("Assignees")) { - processAssignees(row, taskArt, i); + processAssignees(row, task, i); } else if (headerRow[i].equalsIgnoreCase("Resolution")) { - processResolution(row, taskArt, i); + processResolution(row, task, i); } else if (headerRow[i].equalsIgnoreCase("Description")) { - processDescription(row, taskArt, i); + processDescription(row, task, i); } else if (headerRow[i].equalsIgnoreCase("Related to State")) { - processRelatedToState(row, taskArt, i); + processRelatedToState(row, task, i); } else if (headerRow[i].equalsIgnoreCase("Notes")) { - processNotes(row, taskArt, i); + processNotes(row, task, i); } else if (headerRow[i].equalsIgnoreCase("Title")) { - processTitle(row, taskArt, i); + processTitle(row, task, i); } else if (headerRow[i].equalsIgnoreCase("Percent Complete")) { processPercentComplete(row, i); } else if (headerRow[i].equalsIgnoreCase("Hours Spent")) { processHoursSpent(row, i); } else if (headerRow[i].equalsIgnoreCase("Estimated Hours")) { - processEstimatedHours(row, taskArt, i); + processEstimatedHours(row, task, i); } else { OseeLog.log(Activator.class, Level.SEVERE, "Unhandled column => " + headerRow[i]); } } - AtsUtilClient.setEmailEnabled(true); - if (taskArt.isCompleted()) { - Result result = TaskManager.transitionToCompleted(taskArt, 0.0, 0, changes); - if (result.isFalse()) { - AWorkbench.popup(result); - } - } - // always persist - changes.add(taskArt); - if (emailPOCs && !taskArt.isCompleted() && !taskArt.isCancelled()) { - try { - changes.getNotifications().addWorkItemNotificationEvent( - AtsNotificationEventFactory.getWorkItemNotificationEvent( - AtsClientService.get().getUserService().getCurrentUser(), sma, AtsNotifyType.Assigned)); - } catch (OseeCoreException ex) { - OseeLog.log(Activator.class, Level.SEVERE, "Error adding ATS Notification Event", ex); - } - } } private boolean validateRow(String[] row) { @@ -221,7 +185,7 @@ public class ExcelAtsTaskArtifactExtractor { return fullRow; } - private void processTitle(String[] row, TaskArtifact taskArt, int i) throws OseeCoreException { + private void processTitle(String[] row, JaxAtsTask taskArt, int i) throws OseeCoreException { String str = row[i]; if (Strings.isValid(str)) { monitor.subTask(String.format("Title \"%s\"", str)); @@ -229,35 +193,35 @@ public class ExcelAtsTaskArtifactExtractor { } } - private void processNotes(String[] row, TaskArtifact taskArt, int i) throws OseeCoreException { + private void processNotes(String[] row, JaxAtsTask taskArt, int i) throws OseeCoreException { String str = row[i]; if (Strings.isValid(str)) { - taskArt.setSoleAttributeValue(AtsAttributeTypes.SmaNote, str); + taskArt.addAttribute(AtsAttributeTypes.SmaNote, str); } } - private void processRelatedToState(String[] row, TaskArtifact taskArt, int i) throws OseeCoreException { + private void processRelatedToState(String[] row, JaxAtsTask taskArt, int i) throws OseeCoreException { String str = row[i]; if (Strings.isValid(str)) { - taskArt.setSoleAttributeValue(AtsAttributeTypes.RelatedToState, str); + taskArt.addAttribute(AtsAttributeTypes.RelatedToState, str); } } - private void processDescription(String[] row, TaskArtifact taskArt, int i) throws OseeCoreException { + private void processDescription(String[] row, JaxAtsTask taskArt, int i) throws OseeCoreException { String str = row[i]; if (Strings.isValid(str)) { - taskArt.setSoleAttributeValue(AtsAttributeTypes.Description, str); + taskArt.addAttribute(AtsAttributeTypes.Description, str); } } - private void processResolution(String[] row, TaskArtifact taskArt, int i) throws OseeCoreException { + private void processResolution(String[] row, JaxAtsTask taskArt, int i) throws OseeCoreException { String str = row[i]; if (Strings.isValid(str)) { - taskArt.setSoleAttributeValue(AtsAttributeTypes.Resolution, str); + taskArt.addAttribute(AtsAttributeTypes.Resolution, str); } } - private void processEstimatedHours(String[] row, TaskArtifact taskArt, int i) throws OseeArgumentException, OseeCoreException { + private void processEstimatedHours(String[] row, JaxAtsTask taskArt, int i) throws OseeArgumentException, OseeCoreException { String str = row[i]; double hours = 0; if (Strings.isValid(str)) { @@ -266,7 +230,7 @@ public class ExcelAtsTaskArtifactExtractor { } catch (Exception ex) { throw new OseeArgumentException("Invalid Estimated Hours \"%s\" for row %d", str, rowNum); } - taskArt.setSoleAttributeValue(AtsAttributeTypes.EstimatedHours, hours); + taskArt.addAttribute(AtsAttributeTypes.EstimatedHours, String.valueOf(hours)); } } @@ -303,8 +267,7 @@ public class ExcelAtsTaskArtifactExtractor { } } - private void processAssignees(String[] row, TaskArtifact taskArt, int i) throws OseeCoreException { - Set<IAtsUser> assignees = new HashSet<>(); + private void processAssignees(String[] row, JaxAtsTask taskArt, int i) throws OseeCoreException { for (String userName : row[i].split(";")) { userName = userName.replaceAll("^\\s+", ""); userName = userName.replaceAll("\\+$", ""); @@ -323,24 +286,9 @@ public class ExcelAtsTaskArtifactExtractor { userName, rowNum); user = AtsClientService.get().getUserService().getCurrentUser(); } - assignees.add(user); + taskArt.getAssigneeUserIds().add(user.getUserId()); } - taskArt.getStateMgr().setAssignees(assignees); } - private void processOriginator(String[] row, TaskArtifact taskArt, int i) throws OseeCoreException { - String userName = row[i]; - IAtsUser user = null; - if (!Strings.isValid(userName)) { - user = AtsClientService.get().getUserService().getCurrentUser(); - } else { - user = AtsClientService.get().getUserService().getUserByName(userName); - } - if (user == null) { - OseeLog.logf(Activator.class, Level.SEVERE, - "Invalid Originator \"%s\" for row %d\nSetting to current user.", userName, rowNum); - } - taskArt.internalSetCreatedBy(user, changes); - } } }
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.framework.jdk.core/src/org/eclipse/osee/framework/jdk/core/util/Lib.java b/plugins/org.eclipse.osee.framework.jdk.core/src/org/eclipse/osee/framework/jdk/core/util/Lib.java index a42d6c7d4ae..e60478ba303 100644 --- a/plugins/org.eclipse.osee.framework.jdk.core/src/org/eclipse/osee/framework/jdk/core/util/Lib.java +++ b/plugins/org.eclipse.osee.framework.jdk.core/src/org/eclipse/osee/framework/jdk/core/util/Lib.java @@ -85,6 +85,17 @@ public final class Lib { public final static String lineSeparator = System.getProperty("line.separator"); + public static String getFileAtsClass(String filename, Class<?> clazz) { + URL url = clazz.getResource(filename); + File file = new File(url.getPath()); + try { + return fileToString(file); + } catch (IOException ex) { + // do nothing + } + return ""; + } + public static String toFirstCharUpperCase(String str) { if (str == null) { return null; @@ -162,7 +173,7 @@ public final class Lib { /** * Move an object one before the previous object - * + * * @return true if successful */ public static boolean moveBack(ArrayList<Object> list, Object obj) { @@ -179,7 +190,7 @@ public final class Lib { /** * Move an object one after the next object - * + * * @return true if successful */ public static boolean moveForward(ArrayList<Object> list, Object obj) { @@ -297,7 +308,7 @@ public final class Lib { /** * Delete the current file and all empty parents. The method will stop deleting empty parents once it reaches the * stopAt parent. - * + * * @param stopAt path of the parent file to stop deleting at * @param file to delete * @return status <b>true</b> if successful @@ -567,7 +578,7 @@ public final class Lib { /** * Get file extension from the file path - * + * * @return file extension */ public static String getExtension(String filepath) { @@ -625,7 +636,7 @@ public final class Lib { * Sets up an error, input, and output stream for the given process. The error stream gives all information coming * FROM the process through it's err stream. The "outThread" will be what come from the FROM the process through it's * normal output stream. The "inThread" is the stream for issuing commands TO the process. - * + * * @param proc The process whose streams we are setting up * @param output Where all info coming FROM the minicom is sent * @param input Where all data going TO the minicom is sent @@ -906,7 +917,7 @@ public final class Lib { /** * Remove the file extension from the file path - * + * * @return modified file path */ public static String removeExtension(String filepath) { @@ -923,7 +934,7 @@ public final class Lib { /** * Determine if file is a compressed file - * + * * @param file to check * @return <b>true</b> if the files is a compressed file */ @@ -1251,7 +1262,7 @@ public final class Lib { /** * Finds the index of the closing bracket for a function. - * + * * @param start -the index of the character AFTER the opening bracket for the function * @param seq -sequence containing the local function * @return -the index of the matching bracket to the opening bracket of this function @@ -1320,7 +1331,7 @@ public final class Lib { /** * This method takes in any name separated by underscores and converts it into a java standard variable name. - * + * * @return java variable name */ public static final String convertToJavaVariableName(String name) { @@ -1403,7 +1414,7 @@ public final class Lib { /** * Determine is OS is windows - * + * * @return <b>true</b> if OS is windows */ public static boolean isWindows() { @@ -1433,9 +1444,8 @@ public final class Lib { outputStream.flush(); } catch (Exception ex) { - String information = - String.format("JarFile: %s\nEntry: %s\nDestination: %s\n", jarFile.getAbsolutePath(), entry, - destination.getAbsolutePath()); + String information = String.format("JarFile: %s\nEntry: %s\nDestination: %s\n", jarFile.getAbsolutePath(), + entry, destination.getAbsolutePath()); throw new IOException(information + ex.getMessage()); } finally { Lib.close(outputStream); @@ -1631,7 +1641,7 @@ public final class Lib { /** * Determine whether the input stream is word xml content. - * + * * @return <b>true</b> is the input stream is word xml content. */ public static boolean isWordML(InputStream inputStream) { @@ -1703,7 +1713,7 @@ public final class Lib { /** * This will go away once database takes long for artId - * + * * @return unique > 0 int */ public static Long generateArtifactIdAsInt() { diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/artifact/ArtifactTypeManager.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/artifact/ArtifactTypeManager.java index 7a2f40d09bf..6a0775704e7 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/artifact/ArtifactTypeManager.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/artifact/ArtifactTypeManager.java @@ -38,6 +38,7 @@ import org.eclipse.osee.framework.core.services.IOseeCachingService; import org.eclipse.osee.framework.jdk.core.type.OseeArgumentException; 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.Conditions; import org.eclipse.osee.framework.skynet.core.artifact.factory.ArtifactFactoryManager; import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery; import org.eclipse.osee.framework.skynet.core.internal.OseeTypesExportOperation; @@ -164,10 +165,13 @@ public class ArtifactTypeManager { } public static Artifact addArtifact(IArtifactType artifactType, IOseeBranch branch, String name, String guid, long uuid) { + Conditions.checkExpressionFailOnTrue(uuid <= 0L, "Invalid Uuid %d. Must be > 0", uuid); return getFactory(artifactType).makeNewArtifact(branch, artifactType, name, guid, uuid); } public static Artifact addArtifact(IArtifactToken artifactToken, IOseeBranch branch) throws OseeCoreException { + Conditions.checkExpressionFailOnTrue(artifactToken.getUuid() <= 0L, "Invalid Uuid %d. Must be > 0", + artifactToken.getUuid()); return getFactory(artifactToken.getArtifactType()).makeNewArtifact(branch, artifactToken.getArtifactType(), artifactToken.getName(), artifactToken.getGuid(), artifactToken.getUuid()); } diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/artifact/search/ArtifactQuery.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/artifact/search/ArtifactQuery.java index fb311ed7647..72141171fb6 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/artifact/search/ArtifactQuery.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/artifact/search/ArtifactQuery.java @@ -574,12 +574,8 @@ public class ArtifactQuery { } public static Collection<? extends Artifact> reloadArtifacts(Collection<? extends Artifact> artifacts) throws OseeCoreException { - return reloadArtifacts(artifacts, true); - } - - public static Collection<? extends Artifact> reloadArtifacts(Collection<? extends Artifact> artifacts, boolean sendRemoteEvent) throws OseeCoreException { - Collection<Artifact> reloadedArts = new ArrayList<>(artifacts.size()); - HashCollection<IOseeBranch, Artifact> branchMap = new HashCollection<>(); + Collection<Artifact> reloadedArts = new ArrayList<Artifact>(artifacts.size()); + HashCollection<IOseeBranch, Artifact> branchMap = new HashCollection<IOseeBranch, Artifact>(); if (artifacts.isEmpty()) { return artifacts; } @@ -597,9 +593,7 @@ public class ArtifactQuery { ArtifactQueryBuilder query = new ArtifactQueryBuilder(artIds, entrySet.getKey(), INCLUDE_DELETED, ALL); reloadedArts.addAll(query.reloadArtifacts(artIds.size())); - if (sendRemoteEvent) { - OseeEventManager.kickLocalArtifactReloadEvent(query, reloadedArts); - } + OseeEventManager.kickLocalArtifactReloadEvent(query, reloadedArts); artIds.clear(); } return reloadedArts; diff --git a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/massEditor/MassArtifactEditor.java b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/massEditor/MassArtifactEditor.java index e029b3cf5d5..e755be208c4 100644 --- a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/massEditor/MassArtifactEditor.java +++ b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/massEditor/MassArtifactEditor.java @@ -159,7 +159,7 @@ public class MassArtifactEditor extends AbstractArtifactEditor { item.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { - ArtifactQuery.reloadArtifacts(xViewer.getArtifacts(), false); + ArtifactQuery.reloadArtifacts(xViewer.getArtifacts()); xViewer.refresh(); } }); diff --git a/plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/internal/transaction/TransactionBuilderImpl.java b/plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/internal/transaction/TransactionBuilderImpl.java index 4682571c779..6c395d126a6 100644 --- a/plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/internal/transaction/TransactionBuilderImpl.java +++ b/plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/internal/transaction/TransactionBuilderImpl.java @@ -94,11 +94,13 @@ public class TransactionBuilderImpl implements TransactionBuilder { @Override public ArtifactId createArtifact(IArtifactType artifactType, String name, String guid, long uuid) throws OseeCoreException { + Conditions.checkExpressionFailOnTrue(uuid <= 0L, "Invalid Uuid %d. Must be > 0", uuid); return txManager.createArtifact(txData, artifactType, name, guid, uuid); } @Override public ArtifactId createArtifact(IArtifactToken token) throws OseeCoreException { + Conditions.checkExpressionFailOnTrue(token.getUuid() <= 0L, "Invalid Uuid %d. Must be > 0", token.getUuid()); return txManager.createArtifact(txData, token.getArtifactType(), token.getName(), token.getGuid(), token.getUuid()); } diff --git a/plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/util/IdentityManagerImpl.java b/plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/util/IdentityManagerImpl.java index 2e8ba218307..8b4fe4bad59 100644 --- a/plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/util/IdentityManagerImpl.java +++ b/plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/util/IdentityManagerImpl.java @@ -14,6 +14,7 @@ import org.eclipse.osee.framework.core.exception.OseeDataStoreException; import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; import org.eclipse.osee.framework.jdk.core.util.GUID; import org.eclipse.osee.framework.jdk.core.util.HexUtil; +import org.eclipse.osee.framework.jdk.core.util.Lib; import org.eclipse.osee.jdbc.JdbcClient; import org.eclipse.osee.orcs.db.internal.IdentityManager; @@ -37,7 +38,7 @@ public class IdentityManagerImpl implements IdentityManager { @Override public int getNextArtifactId() { - return (int) client.getNextSequence(ART_ID_SEQ, true); + return Lib.generateArtifactIdAsInt().intValue(); } @Override |