|
11 | 11 | import org.biojava.nbio.core.sequence.compound.NucleotideCompound; |
12 | 12 | import org.biojava.nbio.core.sequence.template.Sequence; |
13 | 13 | import org.biojava.nbio.core.sequence.transcription.TranscriptionEngine; |
| 14 | +import org.jetbrains.annotations.Nullable; |
14 | 15 | import org.junit.Assert; |
15 | 16 | import org.junit.Test; |
16 | 17 | import org.labkey.api.collections.IntHashMap; |
|
29 | 30 | import org.labkey.api.query.QueryService; |
30 | 31 | import org.labkey.api.security.User; |
31 | 32 | import org.labkey.api.security.UserManager; |
| 33 | +import org.labkey.api.security.permissions.DeletePermission; |
32 | 34 | import org.labkey.api.sequenceanalysis.RefNtSequenceModel; |
33 | 35 | import org.labkey.api.util.FileUtil; |
34 | 36 | import org.labkey.api.util.Path; |
| 37 | +import org.labkey.api.view.UnauthorizedException; |
35 | 38 | import org.labkey.sequenceanalysis.ReadDataImpl; |
36 | 39 | import org.labkey.sequenceanalysis.SequenceAnalysisSchema; |
37 | 40 | import org.labkey.sequenceanalysis.SequenceAnalysisServiceImpl; |
|
42 | 45 | import java.io.File; |
43 | 46 | import java.io.IOException; |
44 | 47 | import java.io.StringWriter; |
| 48 | +import java.nio.file.Files; |
45 | 49 | import java.util.Arrays; |
46 | 50 | import java.util.Date; |
47 | 51 | import java.util.List; |
@@ -324,4 +328,61 @@ public void createReaddataForSra(int readsetId, String sraAccessions) |
324 | 328 | Table.insert(_user, rd, rd1); |
325 | 329 | } |
326 | 330 | } |
| 331 | + |
| 332 | + public @Nullable String canDeleteNtRecord(int rowId) |
| 333 | + { |
| 334 | + RefNtSequenceModel model = RefNtSequenceModel.getForRowId(rowId); |
| 335 | + if (model == null) |
| 336 | + { |
| 337 | + return "Unknown ref nt record: " + rowId; |
| 338 | + } |
| 339 | + |
| 340 | + Container c = ContainerManager.getForId(model.getContainer()); |
| 341 | + if (c == null) |
| 342 | + { |
| 343 | + return "Unable to find container for: " + model.getContainer(); |
| 344 | + } |
| 345 | + |
| 346 | + if (new TableSelector(SequenceAnalysisSchema.getTable(SequenceAnalysisSchema.TABLE_REF_LIBRARY_MEMBERS), new SimpleFilter(FieldKey.fromString("ref_nt_id"), rowId), null).exists()) |
| 347 | + { |
| 348 | + return "Sequence " + rowId + " is still used by genomes, cannot delete"; |
| 349 | + } |
| 350 | + |
| 351 | + if (!c.hasPermission(_user, DeletePermission.class)) |
| 352 | + { |
| 353 | + return "The user does not have sufficient permissions to delete record: " + rowId; |
| 354 | + } |
| 355 | + |
| 356 | + return null; |
| 357 | + } |
| 358 | + |
| 359 | + public void safeDeleteNtRecord(int rowId) |
| 360 | + { |
| 361 | + RefNtSequenceModel model = RefNtSequenceModel.getForRowId(rowId); |
| 362 | + if (model == null || model.getSequenceFile() == null) |
| 363 | + { |
| 364 | + return; |
| 365 | + } |
| 366 | + |
| 367 | + ExpData d = ExperimentService.get().getExpData(model.getSequenceFile()); |
| 368 | + if (d == null || d.getFile() == null) |
| 369 | + { |
| 370 | + return; |
| 371 | + } |
| 372 | + |
| 373 | + // This assumes canDeleteNtRecord() was called earlier |
| 374 | + try |
| 375 | + { |
| 376 | + if (d.getFile().exists()) |
| 377 | + { |
| 378 | + Files.delete(d.getFile().toPath()); |
| 379 | + } |
| 380 | + } |
| 381 | + catch (IOException e) |
| 382 | + { |
| 383 | + _log.error(e.getMessage(), e); |
| 384 | + } |
| 385 | + |
| 386 | + d.delete(_user, false); |
| 387 | + } |
327 | 388 | } |
0 commit comments