Skip to content

Commit f0c052a

Browse files
Add support for sample creation actions in workflow jobs (#7479)
1 parent 0a40d45 commit f0c052a

6 files changed

Lines changed: 76 additions & 3 deletions

File tree

api/src/org/labkey/api/query/AbstractQueryImportAction.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
import org.labkey.api.view.ViewBackgroundInfo;
7070
import org.labkey.api.webdav.WebdavResource;
7171
import org.labkey.api.webdav.WebdavService;
72+
import org.labkey.api.workflow.WorkflowService;
7273
import org.labkey.vfs.FileLike;
7374
import org.springframework.validation.BindException;
7475
import org.springframework.web.multipart.MultipartFile;
@@ -609,6 +610,11 @@ else if (!dataFileDir.exists())
609610
.setAllowLineageColumns(allowLineageColumns())
610611
.setJobDescription(getQueryImportDescription())
611612
.setJobNotificationProvider(getQueryImportJobNotificationProviderName());
613+
if (WorkflowService.get() != null)
614+
{
615+
Map<String, Object> workflowParams = WorkflowService.get().getConfigParameters(getViewContext().getRequest());
616+
importContextBuilder.setWorkflowParams(workflowParams);
617+
}
612618

613619
importContextBuilder.setTransactionDetails(transactionDetails);
614620
QueryImportPipelineJob job = new QueryImportPipelineJob(getQueryImportProviderName(), info, root, importContextBuilder);

api/src/org/labkey/api/query/QueryImportPipelineJob.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import org.labkey.api.reader.DataLoader;
1717
import org.labkey.api.util.URLHelper;
1818
import org.labkey.api.view.ViewBackgroundInfo;
19+
import org.labkey.api.workflow.WorkflowService;
1920
import org.labkey.vfs.FileLike;
2021

2122
import java.util.HashMap;
@@ -62,6 +63,7 @@ public static class QueryImportAsyncContextBuilder
6263
boolean _allowLineageColumns = false;
6364
Map<AbstractQueryImportAction.Params, Boolean> _optionParamsMap = new HashMap<>();
6465
LookupResolutionType _lookupResolutionType = null;
66+
Map<String, Object> _workflowParams = null;
6567

6668
String _jobDescription;
6769

@@ -212,6 +214,17 @@ public QueryImportAsyncContextBuilder setOptionParamsMap(Map<AbstractQueryImport
212214
return this;
213215
}
214216

217+
public QueryImportAsyncContextBuilder setWorkflowParams(Map<String, Object> workflowParams)
218+
{
219+
_workflowParams = workflowParams;
220+
return this;
221+
}
222+
223+
public Map<String, Object> getWorkflowParams()
224+
{
225+
return _workflowParams;
226+
}
227+
215228
public LookupResolutionType getLookupResolutionType()
216229
{
217230
return _lookupResolutionType;
@@ -311,6 +324,10 @@ public void run()
311324

312325
DataIteratorContext diContext = createDataIteratorContext(ve, getContainer());
313326

327+
if (_importContextBuilder.getWorkflowParams() != null && WorkflowService.get() != null)
328+
{
329+
WorkflowService.get().populateConfigParams(_importContextBuilder.getWorkflowParams(), diContext.getConfigParameters());
330+
}
314331
TransactionAuditProvider.TransactionAuditEvent auditEvent = null;
315332
if (diContext.isCrossTypeImport() || (_importContextBuilder.getAuditBehaviorType() != null && _importContextBuilder.getAuditBehaviorType() != AuditBehaviorType.NONE))
316333
auditEvent = createTransactionAuditEvent(getContainer(), diContext.getInsertOption().auditAction, _importContextBuilder.getTransactionDetails());

api/src/org/labkey/api/workflow/WorkflowService.java

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,29 @@
11
package org.labkey.api.workflow;
22

3+
import jakarta.servlet.http.HttpServletRequest;
34
import org.jetbrains.annotations.NotNull;
4-
import org.labkey.api.data.Container;import org.labkey.api.security.User;import org.labkey.api.services.ServiceRegistry;
5+
import org.labkey.api.data.Container;
6+
import org.labkey.api.dataiterator.DataIteratorBuilder;
7+
import org.labkey.api.query.ValidationException;
8+
import org.labkey.api.security.User;
9+
import org.labkey.api.services.ServiceRegistry;
10+
11+
import java.util.Map;
512

613
public interface WorkflowService
714
{
15+
enum WorkflowConfigs
16+
{
17+
ActionId,
18+
JobId,
19+
}
20+
821
enum ActionType
922
{
10-
AssayImport("assay types", "Imported assay data");
23+
AssayImport("assay types", "Imported assay data"),
24+
DeriveSamples("derivation sample type parameters", "Derived samples"),
25+
AliquotSamples("aliquot sample type parameters", "Aliquot samples"),
26+
PoolSamples("pooling sample type parameters", "Pooled samples");
1127

1228
private final String _inputDescription;
1329
private final String _auditMessage;
@@ -39,6 +55,14 @@ static WorkflowService get()
3955
return ServiceRegistry.get().getService(WorkflowService.class);
4056
}
4157

58+
void populateConfigParams(Map<String, Object> provided, Map<Enum, Object> configParameters) throws ValidationException;
59+
60+
void populateConfigParams(HttpServletRequest request, Map<Enum, Object> configParameters) throws ValidationException;
61+
Map<String, Object> getConfigParameters(HttpServletRequest request) throws ValidationException;
4262
void onActionComplete(@NotNull Container container, @NotNull User user, @NotNull Long actionId);
4363
void onActionComplete(@NotNull Container container, @NotNull User user, @NotNull Long taskId, @NotNull ActionType actionType);
64+
65+
DataIteratorBuilder getSampleCreationDataIteratorBuilder(DataIteratorBuilder data, Container container, User user);
66+
67+
DataIteratorBuilder getActionAuditDataIteratorBuilder(DataIteratorBuilder data, Container container, User user);
4468
}

experiment/src/org/labkey/experiment/api/SampleTypeUpdateServiceDI.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@
108108
import org.labkey.api.util.StringUtilsLabKey;
109109
import org.labkey.api.util.logging.LogHelper;
110110
import org.labkey.api.view.UnauthorizedException;
111+
import org.labkey.api.workflow.WorkflowService;
111112
import org.labkey.experiment.ExpDataIterators;
112113
import org.labkey.experiment.SampleTypeAuditProvider;
113114

@@ -416,6 +417,15 @@ public DataIteratorBuilder createImportDIB(User user, Container container, DataI
416417

417418
if (sampleType.getAutoLinkTargetContainer() != null && StudyPublishService.get() != null && !context.getInsertOption().updateOnly/* TODO support link to study on update? */)
418419
dib = LoggingDataIterator.wrap(new ExpDataIterators.AutoLinkToStudyDataIteratorBuilder(dib, getSchema(), userSchema.getContainer(), userSchema.getUser(), sampleType));
420+
WorkflowService workService = WorkflowService.get();
421+
if (workService != null)
422+
{
423+
if (context.getConfigParameter(WorkflowService.WorkflowConfigs.ActionId) != null)
424+
{
425+
dib = workService.getSampleCreationDataIteratorBuilder(dib, userSchema.getContainer(), userSchema.getUser());
426+
dib = workService.getActionAuditDataIteratorBuilder(dib, userSchema.getContainer(), userSchema.getUser());
427+
}
428+
}
419429
}
420430
return dib;
421431
}

experiment/src/org/labkey/experiment/controllers/exp/ExperimentController.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@
178178
import org.labkey.api.query.SchemaKey;
179179
import org.labkey.api.query.UserSchema;
180180
import org.labkey.api.query.UserSchemaAction;
181+
import org.labkey.api.query.ValidationException;
181182
import org.labkey.api.reader.ColumnDescriptor;
182183
import org.labkey.api.reader.DataLoader;
183184
import org.labkey.api.reader.DataLoaderFactory;
@@ -252,6 +253,7 @@
252253
import org.labkey.api.view.WebPartView;
253254
import org.labkey.api.view.template.ClientDependency;
254255
import org.labkey.api.view.template.PageConfig;
256+
import org.labkey.api.workflow.WorkflowService;
255257
import org.labkey.experiment.ChooseExperimentTypeBean;
256258
import org.labkey.experiment.ConfirmDeleteView;
257259
import org.labkey.experiment.CustomPropertiesView;
@@ -4448,6 +4450,17 @@ protected int importData(
44484450
tInfo = ExperimentService.get().createMaterialTable(new SamplesSchema(getUser(), getContainer()), ContainerFilter.current(this), null);
44494451
updateService = tInfo.getUpdateService();
44504452
}
4453+
if (WorkflowService.get() != null)
4454+
{
4455+
try
4456+
{
4457+
WorkflowService.get().populateConfigParams(getViewContext().getRequest(), _context.getConfigParameters());
4458+
}
4459+
catch (ValidationException e)
4460+
{
4461+
errors.addRowError(e);
4462+
}
4463+
}
44514464

44524465
int count = importData(dl, tInfo, updateService, _context, auditEvent, getUser(), getContainer());
44534466

query/src/org/labkey/query/controllers/QueryController.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,7 @@
267267
import org.labkey.api.view.ViewServlet;
268268
import org.labkey.api.view.WebPartView;
269269
import org.labkey.api.view.template.PageConfig;
270+
import org.labkey.api.workflow.WorkflowService;
270271
import org.labkey.api.writer.HtmlWriter;
271272
import org.labkey.api.writer.ZipFile;
272273
import org.labkey.data.xml.ColumnType;
@@ -4659,11 +4660,13 @@ protected JSONObject executeJson(JSONObject json, CommandType commandType, boole
46594660
}
46604661
}
46614662

4662-
Map<String, Object> extraContext = json.has("extraContext") ? json.getJSONObject("extraContext").toMap() : new CaseInsensitiveHashMap<>();
4663+
Map<String, Object> extraContext = json.has("extraContext") ? new CaseInsensitiveHashMap<>(json.getJSONObject("extraContext").toMap()) : new CaseInsensitiveHashMap<>();
46634664

46644665
Map<String, Object> auditDetails = json.has("auditDetails") ? json.getJSONObject("auditDetails").toMap() : new CaseInsensitiveHashMap<>();
46654666

46664667
Map<Enum, Object> configParameters = new HashMap<>();
4668+
if (WorkflowService.get() != null)
4669+
WorkflowService.get().populateConfigParams(extraContext, configParameters);
46674670

46684671
// Check first if the audit behavior has been defined for the table either in code or through XML.
46694672
// If not defined there, check for the audit behavior defined in the action form (json).

0 commit comments

Comments
 (0)