| /********************************************************************* |
| * Copyright (c) 2019 Boeing |
| * |
| * This program and the accompanying materials are made |
| * available under the terms of the Eclipse Public License 2.0 |
| * which is available at https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * Boeing - initial API and implementation |
| **********************************************************************/ |
| |
| package org.eclipse.osee.ats.core.task; |
| |
| import java.util.Collection; |
| import org.eclipse.osee.ats.api.IAtsWorkItem; |
| import org.eclipse.osee.ats.api.data.AtsTaskDefToken; |
| import org.eclipse.osee.ats.api.task.create.ChangeReportTaskData; |
| import org.eclipse.osee.ats.api.task.create.CreateTasksDefinitionBuilder; |
| import org.eclipse.osee.ats.api.user.AtsUser; |
| import org.eclipse.osee.ats.api.util.AtsUtil; |
| import org.eclipse.osee.ats.api.util.IAtsChangeSet; |
| import org.eclipse.osee.ats.api.workdef.IStateToken; |
| import org.eclipse.osee.ats.api.workflow.hooks.IAtsTransitionHook; |
| import org.eclipse.osee.ats.core.internal.AtsApiService; |
| import org.eclipse.osee.framework.jdk.core.type.OseeArgumentException; |
| |
| /** |
| * Contributed through StateDefBuilder |
| * |
| * @author Donald G. Dunne |
| */ |
| public class CreateChangeReportTaskTransitionHook implements IAtsTransitionHook { |
| |
| private final AtsTaskDefToken taskDefToken; |
| |
| public CreateChangeReportTaskTransitionHook(AtsTaskDefToken taskDefToken) { |
| this.taskDefToken = taskDefToken; |
| } |
| |
| @Override |
| public void transitioned(IAtsWorkItem workItem, IStateToken fromState, IStateToken toState, Collection<? extends AtsUser> toAssignees, IAtsChangeSet changes) { |
| if (!workItem.isTeamWorkflow()) { |
| return; |
| } |
| Thread thread = new Thread("Create/Update Tasks") { |
| @Override |
| public void run() { |
| // Multiple TaskSetDefinitions can be registered for a transition; ensure applicable before running |
| CreateTasksDefinitionBuilder taskSetDefinition = |
| AtsApiService.get().getTaskSetDefinitionProviderService().getTaskSetDefinition(taskDefToken); |
| if (taskSetDefinition != null && taskSetDefinition.getCreateTasksDef().getHelper().isApplicable(workItem, |
| AtsApiService.get())) { |
| ChangeReportTaskData data = runChangeReportTaskOperation(workItem, taskDefToken, changes); |
| if (data.getResults().isErrors()) { |
| throw new OseeArgumentException(data.getResults().toString()); |
| } |
| } |
| } |
| }; |
| if (AtsUtil.isInTest()) { |
| thread.run(); |
| } else { |
| thread.start(); |
| } |
| } |
| |
| public static ChangeReportTaskData runChangeReportTaskOperation(IAtsWorkItem workItem, AtsTaskDefToken taskDefToken, IAtsChangeSet changes) { |
| ChangeReportTaskData data = new ChangeReportTaskData(); |
| data.setTaskDefToken(taskDefToken); |
| data.setHostTeamWf(workItem.getStoreObject()); |
| data.setAsUser(AtsApiService.get().getUserService().getCurrentUser()); |
| |
| /** |
| * Until all transitions are done on server, need to directly call this operation so it's part of the full |
| * IAtsChangeSet. Otherwise transitioning will reload teamWfs and tasks after task creation. |
| */ |
| CreateChangeReportTasksOperation operation = |
| new CreateChangeReportTasksOperation(data, AtsApiService.get(), changes); |
| operation.run(); |
| |
| return data; |
| } |
| |
| @Override |
| public String getDescription() { |
| return "Checks for and runs Change Report Task Set Definitions during tranisition"; |
| } |
| |
| } |