Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions api/src/org/labkey/api/exp/DeleteForm.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,28 @@ public class DeleteForm extends ProtocolIdForm implements DataRegionSelection.Da
private Long _singleObjectRowId;
private List<Long> _rowIds;
private String _userComment;
private String _editMethod;
private String _requestSource;

public String getRequestSource()
{
return _requestSource;
}

public void setRequestSource(String requestSource)
{
_requestSource = requestSource;
}

public String getEditMethod()
{
return _editMethod;
}

public void setEditMethod(String editMethod)
{
_editMethod = editMethod;
}

public void setUserComment(String userComment)
{
Expand Down
3 changes: 2 additions & 1 deletion api/src/org/labkey/api/exp/api/ExperimentService.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.labkey.api.assay.AssayProvider;
import org.labkey.api.audit.TransactionAuditProvider;
import org.labkey.api.collections.CaseInsensitiveHashSet;
import org.labkey.api.data.Container;
import org.labkey.api.data.ContainerFilter;
Expand Down Expand Up @@ -821,7 +822,7 @@ static void validateParentAlias(Map<String, String> aliasMap, Set<String> reserv

void deleteExperimentRunsByRowIds(Container container, final User user, long... runRowIds);

void deleteExperimentRunsByRowIds(Container container, final User user, @Nullable String userComment, @NotNull Collection<Long> runRowIds);
void deleteExperimentRunsByRowIds(Container container, final User user, @Nullable String userComment, @NotNull Collection<Long> runRowIds, @Nullable Map<TransactionAuditProvider.TransactionDetail, Object> transactionDetails);

void deleteExpExperimentByRowId(Container container, User user, long experimentId);

Expand Down
2 changes: 1 addition & 1 deletion experiment/src/org/labkey/experiment/api/ExpRunImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -337,7 +337,7 @@ public void delete(User user, @Nullable final String auditUserComment)
{
throw new UnauthorizedException();
}
ExperimentServiceImpl.get().deleteExperimentRuns(getContainer(), user, auditUserComment, Arrays.asList(this));
ExperimentServiceImpl.get().deleteExperimentRuns(getContainer(), user, auditUserComment, Arrays.asList(this), null);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4201,22 +4201,28 @@ public Lsid getDataClassLsid(Container container)
@Override
public void deleteExperimentRunsByRowIds(Container container, final User user, long... runRowIds)
{
deleteExperimentRunsByRowIds(container, user, null, Arrays.stream(runRowIds).boxed().toList());
deleteExperimentRunsByRowIds(container, user, null, Arrays.stream(runRowIds).boxed().toList(), null);
}

@Override
public void deleteExperimentRunsByRowIds(Container container, final User user, @Nullable final String userComment, @NotNull Collection<Long> runRowIds)
public void deleteExperimentRunsByRowIds(Container container, final User user, @Nullable final String userComment, @NotNull Collection<Long> runRowIds, @Nullable Map<TransactionAuditProvider.TransactionDetail, Object> transactionDetails)
{
deleteExperimentRuns(container, user, userComment, getExpRuns(runRowIds));
deleteExperimentRuns(container, user, userComment, getExpRuns(runRowIds), transactionDetails);
}

public void deleteExperimentRuns(Container container, final User user, @Nullable final String userComment, @NotNull Collection<ExpRunImpl> runs)
public void deleteExperimentRuns(Container container, final User user, @Nullable final String userComment, @NotNull Collection<ExpRunImpl> runs, @Nullable Map<TransactionAuditProvider.TransactionDetail, Object> transactionDetails)
{
if (runs.isEmpty())
return;

try (DbScope.Transaction transaction = ensureTransaction())
{
if (transaction.getAuditEvent() == null)
{
TransactionAuditProvider.TransactionAuditEvent auditEvent = AbstractQueryUpdateService.createTransactionAuditEvent(container, QueryService.AuditAction.DELETE, transactionDetails);
AbstractQueryUpdateService.addTransactionAuditEvent(transaction, user, auditEvent);
}

AssayService assayService = AssayService.get();
// This can be slightly expensive to fetch, so don't do it multiple times if runs share protocols
Map<ExpProtocol, ProtocolImplementation> protocolImpls = new HashMap<>();
Expand Down Expand Up @@ -5096,13 +5102,13 @@ private void deleteRunsUsingInputs(User user, Collection<Data> dataItems, Collec
if (containers.size() == 1)
{
Container runContainer = containers.iterator().next();
deleteExperimentRuns(runContainer, user, null, runsToDelete);
deleteExperimentRuns(runContainer, user, null, runsToDelete, null);
}
else
{
// the slow way
for (ExpRunImpl run : runsToDelete)
deleteExperimentRuns(run.getContainer(), user, null, Collections.singleton(run));
deleteExperimentRuns(run.getContainer(), user, null, Collections.singleton(run), null);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3465,7 +3465,7 @@ public ModelAndView getView(DeleteForm deleteForm, boolean reshow, BindException
@Override
protected void deleteObjects(DeleteForm deleteForm)
{
ExperimentServiceImpl.get().deleteExperimentRunsByRowIds(getContainer(), getUser(), deleteForm.getUserComment(), deleteForm.getIds(false));
ExperimentServiceImpl.get().deleteExperimentRunsByRowIds(getContainer(), getUser(), deleteForm.getUserComment(), deleteForm.getIds(false), getTransactionAuditDetails());
}
}

Expand Down Expand Up @@ -3530,7 +3530,12 @@ protected ApiSimpleResponse deleteObjects(CascadeDeleteForm form)
runIdsToDelete.addAll(runIdsCascadeDeleted);
}

ExperimentService.get().deleteExperimentRunsByRowIds(getContainer(), getUser(), form.getUserComment(), runIdsToDelete);
Map<TransactionAuditProvider.TransactionDetail, Object> transactionAuditDetails = getTransactionAuditDetails();
if (form.getRequestSource() != null)
transactionAuditDetails.put(TransactionAuditProvider.TransactionDetail.RequestSource, form.getRequestSource());
if (form.getEditMethod() != null)
transactionAuditDetails.put(TransactionAuditProvider.TransactionDetail.EditMethod, form.getEditMethod());
ExperimentService.get().deleteExperimentRunsByRowIds(getContainer(), getUser(), form.getUserComment(), runIdsToDelete, transactionAuditDetails);

ApiSimpleResponse response = new ApiSimpleResponse("success", true);
response.put("runIdsDeleted", runIdsToDelete);
Expand Down