11package org .labkey .sequenceanalysis .pipeline ;
22
3+ import org .apache .commons .lang3 .StringUtils ;
34import org .jetbrains .annotations .NotNull ;
45import org .labkey .api .data .Container ;
56import org .labkey .api .files .FileUrls ;
1011import org .labkey .api .pipeline .PipelineDirectory ;
1112import org .labkey .api .pipeline .PipelineJob ;
1213import org .labkey .api .pipeline .PipelineJobException ;
14+ import org .labkey .api .pipeline .PipelineJobService ;
1315import org .labkey .api .pipeline .PipelineProvider ;
1416import org .labkey .api .pipeline .RecordedActionSet ;
17+ import org .labkey .api .pipeline .TaskId ;
18+ import org .labkey .api .pipeline .TaskPipeline ;
1519import org .labkey .api .security .User ;
1620import org .labkey .api .sequenceanalysis .pipeline .ReferenceGenome ;
1721import org .labkey .api .sequenceanalysis .pipeline .ReferenceGenomeManager ;
2832import java .util .Collections ;
2933import java .util .List ;
3034import java .util .Map ;
35+ import java .util .Set ;
36+ import java .util .stream .Collectors ;
3137
3238public class CacheGenomePipelineJob extends PipelineJob
3339{
3440 private Map <Integer , File > _genomeMap ;
41+ private boolean _deleteOtherFolders = false ;
3542
3643 public static class Provider extends PipelineProvider
3744 {
@@ -55,11 +62,12 @@ protected CacheGenomePipelineJob()
5562
5663 }
5764
58- public CacheGenomePipelineJob (Container c , User user , PipeRoot pipeRoot , Map <Integer , File > genomeMap , File outputDir )
65+ public CacheGenomePipelineJob (Container c , User user , PipeRoot pipeRoot , Map <Integer , File > genomeMap , File outputDir , boolean deleteOtherFolders )
5966 {
6067 super (Provider .NAME , new ViewBackgroundInfo (c , user , null ), pipeRoot );
6168
6269 _genomeMap = genomeMap ;
70+ _deleteOtherFolders = deleteOtherFolders ;
6371
6472 setLogFile (new File (outputDir , FileUtil .makeFileNameWithTimestamp ("cacheGenomes" , "log" )));
6573
@@ -75,6 +83,16 @@ public void setGenomeMap(Map<Integer, File> genomeMap)
7583 _genomeMap = genomeMap ;
7684 }
7785
86+ public boolean isDeleteOtherFolders ()
87+ {
88+ return _deleteOtherFolders ;
89+ }
90+
91+ public void setDeleteOtherFolders (boolean deleteOtherFolders )
92+ {
93+ _deleteOtherFolders = deleteOtherFolders ;
94+ }
95+
7896 @ Override
7997 public URLHelper getStatusHref ()
8098 {
@@ -87,6 +105,12 @@ public String getDescription()
87105 return "Caches reference genomes to a remote filesystem" ;
88106 }
89107
108+ @ Override
109+ public TaskPipeline getTaskPipeline ()
110+ {
111+ return PipelineJobService .get ().getTaskPipeline (new TaskId (CacheGenomePipelineJob .class ));
112+ }
113+
90114 public static class CacheGenomesTask extends PipelineJob .Task <CacheGenomesTask .Factory >
91115 {
92116 protected CacheGenomesTask (Factory factory , PipelineJob job )
@@ -135,7 +159,7 @@ public boolean isJobComplete(PipelineJob job)
135159 File cacheDir = SequencePipelineService .get ().getRemoteGenomeCacheDirectory ();
136160 if (cacheDir == null )
137161 {
138- return new RecordedActionSet ( );
162+ throw new PipelineJobException ( "This job should not have been initiated unless REMOTE_GENOME_CACHE_DIR is set" );
139163 }
140164
141165 if (!cacheDir .exists ())
@@ -151,6 +175,20 @@ public boolean isJobComplete(PipelineJob job)
151175 ReferenceGenomeManager .get ().cacheGenomeLocally (rg , getJob ().getLogger ());
152176 }
153177
178+ if (job .isDeleteOtherFolders ())
179+ {
180+ Set <String > whitelist = job .getGenomeMap ().keySet ().stream ().map (String ::valueOf ).collect (Collectors .toSet ());
181+ File [] toDelete = cacheDir .listFiles ((file ) -> {
182+ return !whitelist .contains (file .getName ());
183+ });
184+
185+ if (toDelete != null && toDelete .length > 0 )
186+ {
187+ getJob ().getLogger ().info ("Folders will be deleted: " + StringUtils .join (toDelete , ", " ));
188+ //TODO: verify
189+ }
190+ }
191+
154192 return new RecordedActionSet ();
155193 }
156194 }
0 commit comments