blob: 320f9b0b4e5abb0eeeab3eb36bd08f09888b435e [file] [log] [blame]
/*********************************************************************
* Copyright (c) 2015 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.ide.workflow.task.internal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.eclipse.osee.ats.api.AtsApi;
import org.eclipse.osee.ats.api.data.AtsArtifactTypes;
import org.eclipse.osee.ats.api.task.AtsTaskEndpointApi;
import org.eclipse.osee.ats.api.task.JaxAtsTask;
import org.eclipse.osee.ats.api.task.NewTaskData;
import org.eclipse.osee.ats.api.task.NewTaskSet;
import org.eclipse.osee.ats.api.task.create.ChangeReportTaskData;
import org.eclipse.osee.ats.api.task.create.ChangeReportTaskNameProviderToken;
import org.eclipse.osee.ats.api.task.create.IAtsChangeReportTaskNameProvider;
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.task.AbstractAtsTaskServiceCore;
import org.eclipse.osee.ats.core.task.ChangeReportTaskNameProviderService;
import org.eclipse.osee.ats.core.workflow.Task;
import org.eclipse.osee.ats.ide.column.RelatedToStateColumn;
import org.eclipse.osee.ats.ide.internal.Activator;
import org.eclipse.osee.ats.ide.util.AtsApiIde;
import org.eclipse.osee.ats.ide.workflow.task.IAtsTaskServiceIde;
import org.eclipse.osee.ats.ide.workflow.task.TaskArtifact;
import org.eclipse.osee.ats.ide.workflow.teamwf.TeamWorkFlowArtifact;
import org.eclipse.osee.framework.core.data.ArtifactId;
import org.eclipse.osee.framework.core.data.ArtifactToken;
import org.eclipse.osee.framework.jdk.core.type.OseeArgumentException;
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;
import org.eclipse.osee.framework.skynet.core.artifact.ArtifactCache;
import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
import org.eclipse.osee.framework.ui.skynet.results.XResultDataUI;
import org.eclipse.osee.framework.ui.skynet.widgets.dialog.EntryComboComboDialog;
import org.eclipse.osee.framework.ui.skynet.widgets.dialog.EntryComboDialog;
/**
* @author Donald G. Dunne
*/
public class AtsTaskService extends AbstractAtsTaskServiceCore implements IAtsTaskServiceIde {
private final AtsApi atsApi;
public AtsTaskService(AtsApiIde atsClient) {
super(atsClient);
this.atsApi = atsClient;
}
@Override
public NewTaskSet createTasks(NewTaskSet newTaskSet) {
AtsTaskEndpointApi taskEp = atsApi.getServerEndpoints().getTaskEp();
newTaskSet = taskEp.create(newTaskSet);
List<Artifact> arts = new ArrayList<>();
for (NewTaskData newTaskData : newTaskSet.getNewTaskDatas()) {
Long teamWfId = newTaskData.getTeamWfId();
Artifact art = ArtifactCache.getActive(teamWfId, atsApi.getAtsBranch());
if (art != null) {
arts.add(art);
}
for (JaxAtsTask task : newTaskData.getTasks()) {
task.setAtsApi(atsApi);
}
}
ArtifactQuery.reloadArtifacts(arts);
return newTaskSet;
}
@Override
public TaskArtifact createNewTaskWithDialog(IAtsTeamWorkflow teamWf) {
TaskArtifact taskArt = null;
try {
EntryComboDialog ed = null;
EntryComboComboDialog ed2 = null;
// Determine if multiple work defs and/or miss-matched work defs
Collection<IAtsWorkDefinition> taskWorkDefs = atsApi.getTaskService().calculateTaskWorkDefs(teamWf);
String comment = "Create New Task";
if (taskWorkDefs.size() == 0 || taskWorkDefs.size() == 1) {
ed = new EntryComboDialog(comment, "Enter Task Title", RelatedToStateColumn.RELATED_TO_STATE_SELECTION);
List<String> validStates =
RelatedToStateColumn.getValidInWorkStates((TeamWorkFlowArtifact) teamWf.getStoreObject());
ed.setOptions(validStates);
} else {
ed2 = new EntryComboComboDialog(comment, "Enter Task Title and Select Task Work Definition",
RelatedToStateColumn.RELATED_TO_STATE_SELECTION, "Select Task Work Definition");
ed = ed2;
List<String> validStates =
RelatedToStateColumn.getValidInWorkStates((TeamWorkFlowArtifact) teamWf.getStoreObject());
ed2.setOptions(validStates);
ed2.setOptions2(taskWorkDefs);
ed2.setCombo2Required(true);
}
if (ed.open() == 0) {
NewTaskSet newTaskSet =
NewTaskSet.createWithData(comment, teamWf.getId(), atsApi.getUserService().getCurrentUser().getUserId());
NewTaskData newTaskData = newTaskSet.getTaskData();
String title = ed.getEntry();
JaxAtsTask task =
JaxAtsTask.create(newTaskData, title, atsApi.getUserService().getCurrentUser(), new Date());
task.setId(ArtifactId.SENTINEL.getId());
if (ed2 != null) {
task.setTaskWorkDef(((IAtsWorkDefinition) ed2.getSelection2()).getIdString());
} else if (taskWorkDefs.size() == 1) {
task.setTaskWorkDef(taskWorkDefs.iterator().next().getIdString());
}
if (Strings.isValid(ed.getSelection())) {
task.setRelatedToState(ed.getSelection());
}
atsApi.getTaskService().createTasks(newTaskSet);
if (newTaskSet.isErrors()) {
XResultDataUI.report(newTaskSet.getResults(), title);
return null;
} else {
taskArt = (TaskArtifact) atsApi.getQueryService().getArtifact(task.getId());
}
}
} catch (Exception ex) {
OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
}
return taskArt;
}
@Override
public ChangeReportTaskData createTasks(ChangeReportTaskData changeReportTaskData) {
ChangeReportTaskData crtd = atsApi.getServerEndpoints().getTaskEp().create(changeReportTaskData);
reloadTasksIfNecessary(crtd);
return crtd;
}
private void reloadTasksIfNecessary(ChangeReportTaskData crtd) {
if (crtd.getTransaction().isValid()) {
List<ArtifactToken> toReload = new ArrayList<>();
for (ArtifactId id : crtd.getIds()) {
Artifact cachedArt = ArtifactCache.getActive(id, atsApi.getAtsBranch());
if (cachedArt != null) {
toReload.add(cachedArt);
}
}
if (!toReload.isEmpty()) {
ArtifactQuery.reloadArtifacts(toReload);
}
}
}
@Override
public IAtsChangeReportTaskNameProvider getChangeReportOptionNameProvider(ChangeReportTaskNameProviderToken token) {
return ChangeReportTaskNameProviderService.getChangeReportOptionNameProvider(token);
}
@Override
public IAtsTask getTask(ArtifactToken artifact) {
IAtsTask task = null;
if (artifact instanceof IAtsTask) {
task = (IAtsTask) artifact;
} else if (artifact.isOfType(AtsArtifactTypes.Task)) {
task = new Task(atsApi.getLogger(), atsApi, artifact);
} else {
throw new OseeArgumentException("Artifact %s must be of type Task", artifact.toStringWithId());
}
return task;
}
@Override
public NewTaskSet createTasks(NewTaskSet newTaskSet, Map<Long, IAtsTeamWorkflow> idToTeamWf) {
throw new UnsupportedOperationException("Not supported on IDE client");
}
}