Skip to content

Commit 30f66ea

Browse files
author
Ian Sigmon
authored
Convert File usages to use FileLike or the comparable class (#161)
1 parent 1d6533c commit 30f66ea

File tree

10 files changed

+147
-106
lines changed

10 files changed

+147
-106
lines changed

genotyping/src/org/labkey/genotyping/GenotypingController.java

Lines changed: 45 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
import jakarta.servlet.http.HttpServletResponse;
2020
import org.apache.commons.io.IOUtils;
21-
import org.apache.logging.log4j.LogManager;
2221
import org.apache.logging.log4j.Logger;
2322
import org.jetbrains.annotations.NotNull;
2423
import org.jetbrains.annotations.Nullable;
@@ -86,10 +85,12 @@
8685
import org.labkey.api.security.permissions.ReadPermission;
8786
import org.labkey.api.security.permissions.UpdatePermission;
8887
import org.labkey.api.util.DateUtil;
88+
import org.labkey.api.util.FileUtil;
8989
import org.labkey.api.util.MinorConfigurationException;
9090
import org.labkey.api.util.PageFlowUtil;
9191
import org.labkey.api.util.Pair;
9292
import org.labkey.api.util.URLHelper;
93+
import org.labkey.api.util.logging.LogHelper;
9394
import org.labkey.api.view.ActionURL;
9495
import org.labkey.api.view.DataView;
9596
import org.labkey.api.view.DetailsView;
@@ -110,6 +111,8 @@
110111
import org.labkey.genotyping.sequences.FastqGenerator;
111112
import org.labkey.genotyping.sequences.FastqWriter;
112113
import org.labkey.genotyping.sequences.SequenceManager;
114+
import org.labkey.vfs.FileLike;
115+
import org.labkey.vfs.FileSystemLike;
113116
import org.springframework.validation.BindException;
114117
import org.springframework.validation.Errors;
115118
import org.springframework.web.servlet.ModelAndView;
@@ -122,6 +125,8 @@
122125
import java.math.BigInteger;
123126
import java.net.MalformedURLException;
124127
import java.net.URL;
128+
import java.nio.file.Path;
129+
import java.nio.file.Paths;
125130
import java.sql.ResultSet;
126131
import java.sql.SQLException;
127132
import java.util.Collection;
@@ -139,7 +144,7 @@
139144

140145
public class GenotypingController extends SpringActionController
141146
{
142-
private static final Logger LOG = LogManager.getLogger(GenotypingController.class);
147+
private static final Logger LOG = LogHelper.getLogger(GenotypingController.class, "Logger for Genotyping Controller");
143148
@SuppressWarnings({"unchecked"})
144149
private static final DefaultActionResolver _actionResolver = new DefaultActionResolver(GenotypingController.class);
145150

@@ -1005,9 +1010,13 @@ private String importReads(ImportReadsForm form) throws Exception
10051010
if (null == form.getPlatform())
10061011
return "You must specify a sequence platform";
10071012

1013+
PipeRoot root = PipelineService.get().getPipelineRootSetting(getContainer());
1014+
if (!root.getRootFileLike().isDescendant(FileUtil.createUri(form.getReadsPath())))
1015+
return "File must be a descendant of a pipeline";
1016+
10081017
try
10091018
{
1010-
File readsFile = new File(form.getReadsPath());
1019+
FileLike readsFile = root.resolvePathToFileLike(root.relativePath(Paths.get(form.getReadsPath())));
10111020
GenotypingRun run;
10121021

10131022
try
@@ -1023,7 +1032,6 @@ private String importReads(ImportReadsForm form) throws Exception
10231032
}
10241033

10251034
ViewBackgroundInfo vbi = new ViewBackgroundInfo(getContainer(), getUser(), getViewContext().getActionURL());
1026-
PipeRoot root = PipelineService.get().findPipelineRoot(getContainer());
10271035
ImportReadsForm.Platforms platform = ImportReadsForm.Platforms.valueOf(form.getPlatform());
10281036

10291037
platform.prepareAndQueueRunJob(vbi, root, new File(form.getReadsPath()), run, form.getPrefix());
@@ -1178,10 +1186,17 @@ private ColumnInfo getColumnInfo(Map<FieldKey, ColumnInfo> fieldMap, String colu
11781186
public boolean handlePost(AnalyzeForm form, BindException errors) throws Exception
11791187
{
11801188
GenotypingRun run = GenotypingManager.get().getRun(getContainer(), form.getRun());
1181-
File readsPath = new File(run.getPath(), run.getFileName());
1182-
ViewBackgroundInfo vbi = new ViewBackgroundInfo(getContainer(), getUser(), getViewContext().getActionURL());
1189+
if (run == null)
1190+
{
1191+
errors.rejectValue("run", ERROR_MSG, "No run found");
1192+
return false;
1193+
}
1194+
11831195
PipeRoot root = PipelineService.get().findPipelineRoot(getContainer());
11841196

1197+
FileLike readsFile = run.getWorkingDir().resolveChild(run.getFileName());
1198+
ViewBackgroundInfo vbi = new ViewBackgroundInfo(getContainer(), getUser(), getViewContext().getActionURL());
1199+
11851200
String sequencesViewName = form.getSequencesView();
11861201
String description = form.getDescription();
11871202
String sequencesView = DEFAULT_VIEW_PLACEHOLDER.equals(sequencesViewName) ? null : sequencesViewName;
@@ -1202,7 +1217,7 @@ public boolean handlePost(AnalyzeForm form, BindException errors) throws Excepti
12021217
GenotypingAnalysis analysis = GenotypingManager.get().createAnalysis(getContainer(), getUser(), run, description, sequencesView);
12031218
try
12041219
{
1205-
PipelineJob analysisJob = new SubmitAnalysisJob(vbi, root, readsPath, analysis, sampleKeys);
1220+
PipelineJob analysisJob = new SubmitAnalysisJob(vbi, root, readsFile, analysis, sampleKeys);
12061221
PipelineService.get().queueJob(analysisJob);
12071222
}
12081223
catch (MinorConfigurationException e)
@@ -1292,10 +1307,10 @@ public Object execute(ImportAnalysisForm form, BindException errors) throws Exce
12921307

12931308
try
12941309
{
1310+
FileLike analysisDir = FileSystemLike.getVerifiedFileLike(getContainer(), form.getPath());
12951311
int analysisId = form.getAnalysis();
1296-
File analysisDir = new File(form.getPath());
1297-
User user = getUser();
12981312

1313+
User user = getUser();
12991314
if (user.isGuest())
13001315
{
13011316
Properties props = GenotypingManager.get().readProperties(analysisDir);
@@ -1378,16 +1393,26 @@ public void validateCommand(PipelinePathForm target, Errors errors)
13781393
@Override
13791394
public boolean handlePost(PipelinePathForm form, BindException errors) throws IOException, PipelineValidationException
13801395
{
1396+
Container container = getContainer();
13811397
// Manual upload of genotyping analysis; pipeline provider posts to this action with matches file.
1382-
File matches = form.getValidatedSingleFile(getContainer());
1383-
File analysisDir = matches.getParentFile();
1398+
Path singleFile = form.getValidatedSinglePath(container);
1399+
1400+
if (form.getPipeRoot(container).getRootFileLike().isDescendant(singleFile.toUri()))
1401+
{
13841402

1385-
// Load properties to determine the run.
1386-
Properties props = GenotypingManager.get().readProperties(analysisDir);
1387-
int analysisId = Integer.parseInt((String)props.get("analysis"));
1388-
importAnalysis(analysisId, analysisDir, getUser());
1403+
FileLike matches = form.getPipeRoot(container).resolvePathToFileLike(singleFile.toString());
1404+
FileLike analysisDir = matches.getParent();
13891405

1390-
return true;
1406+
// Load properties to determine the run.
1407+
Properties props = GenotypingManager.get().readProperties(analysisDir);
1408+
int analysisId = Integer.parseInt((String) props.get("analysis"));
1409+
importAnalysis(analysisId, analysisDir, getUser());
1410+
1411+
return true;
1412+
}
1413+
1414+
errors.reject(ERROR_MSG, "File was not found under the pipeline root");
1415+
return false;
13911416
}
13921417

13931418
@Override
@@ -1398,13 +1423,13 @@ public URLHelper getSuccessURL(PipelinePathForm pipelinePathForm)
13981423
}
13991424

14001425

1401-
private void importAnalysis(int analysisId, File pipelineDir, User user) throws IOException, PipelineValidationException
1426+
private void importAnalysis(int analysisId, FileLike pipelineDir, User user) throws IOException, PipelineValidationException
14021427
{
14031428
GenotypingAnalysis analysis = GenotypingManager.get().getAnalysis(getContainer(), analysisId);
1404-
File analysisDir = new File(analysis.getPath());
1429+
FileLike analysisDir = new FileSystemLike.Builder(Paths.get(analysis.getPath())).readwrite().root();
14051430

1406-
String pipelinePath = pipelineDir.getCanonicalPath();
1407-
String analysisPath = analysisDir.getCanonicalPath();
1431+
String pipelinePath = FileUtil.getAbsoluteCaseSensitiveFile(pipelineDir.toNioPathForRead().toFile()).getAbsolutePath();
1432+
String analysisPath = FileUtil.getAbsoluteCaseSensitiveFile(analysisDir.toNioPathForRead().toFile()).getAbsolutePath();
14081433

14091434
if (!pipelinePath.equals(analysisPath))
14101435
throw new FileNotFoundException("Analysis path (\"" + analysisPath +

genotyping/src/org/labkey/genotyping/GenotypingManager.java

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,12 @@
3232
import org.labkey.api.query.FieldKey;
3333
import org.labkey.api.query.QueryHelper;
3434
import org.labkey.api.security.User;
35+
import org.labkey.api.util.FileUtil;
3536
import org.labkey.api.util.SafeToRenderEnum;
3637
import org.labkey.api.view.NotFoundException;
38+
import org.labkey.vfs.FileLike;
3739

38-
import java.io.File;
39-
import java.io.FileInputStream;
4040
import java.io.FileNotFoundException;
41-
import java.io.FileOutputStream;
4241
import java.io.IOException;
4342
import java.io.InputStream;
4443
import java.io.OutputStream;
@@ -124,14 +123,14 @@ public void saveSettings(Container c, GenotypingFolderSettings settings)
124123
map.save();
125124
}
126125

127-
public GenotypingRun createRun(Container c, User user, Integer metaDataId, File readsFile, String platform)
126+
public GenotypingRun createRun(Container c, User user, Integer metaDataId, FileLike readsFile, String platform)
128127
{
129128
MetaDataRun mdRun = null;
130129

131130
if (null != metaDataId)
132131
mdRun = getMetaDataRun(c, user, metaDataId, "importing reads");
133132

134-
GenotypingRun run = new GenotypingRun(c, readsFile, mdRun, platform);
133+
GenotypingRun run = new GenotypingRun(c, readsFile.toNioPathForWrite().toFile(), mdRun, platform);
135134
return Table.insert(user, GenotypingSchema.get().getRunsTable(), run);
136135
}
137136

@@ -281,39 +280,31 @@ private void deleteAnalyses(CharSequence analysisFilter, Object... params)
281280
}
282281

283282

284-
public void writeProperties(Properties props, File directory) throws IOException
283+
public void writeProperties(Properties props, FileLike directory) throws IOException
285284
{
286-
File propXml = new File(directory, PROPERTIES_FILE_NAME);
287-
OutputStream os = null;
288-
try
285+
try (OutputStream os = directory.resolveChild(PROPERTIES_FILE_NAME).openOutputStream())
289286
{
290-
os = new FileOutputStream(propXml);
291287
props.storeToXML(os, null);
292288
}
293-
finally
294-
{
295-
if (null != os)
296-
os.close();
297-
}
298289
}
299290

300-
public Properties readProperties(File directory) throws IOException
291+
public Properties readProperties(FileLike directory) throws IOException
301292
{
302293
if (!directory.exists())
303-
throw new FileNotFoundException(directory.getAbsolutePath() + " does not exist");
294+
throw new FileNotFoundException(FileUtil.getAbsolutePath(directory.toNioPathForRead()) + " does not exist");
304295

305296
if (!directory.isDirectory())
306-
throw new FileNotFoundException(directory.getAbsolutePath() + " is not a directory");
297+
throw new FileNotFoundException(FileUtil.getAbsolutePath(directory.toNioPathForRead()) + " is not a directory");
307298

308-
File properties = new File(directory, PROPERTIES_FILE_NAME);
299+
FileLike properties = directory.resolveChild(PROPERTIES_FILE_NAME);
309300

310301
// Load properties to determine the run.
311302
Properties props = new Properties();
312303
InputStream is = null;
313304

314305
try
315306
{
316-
is = new FileInputStream(properties);
307+
is = properties.openInputStream();
317308
props.loadFromXML(is);
318309
}
319310
finally

genotyping/src/org/labkey/genotyping/GenotypingRun.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,17 @@
1515
*/
1616
package org.labkey.genotyping;
1717

18+
import com.fasterxml.jackson.annotation.JsonIgnore;
1819
import org.jetbrains.annotations.Nullable;
1920
import org.labkey.api.data.Container;
21+
import org.labkey.api.pipeline.PipelineService;
2022
import org.labkey.api.security.User;
2123
import org.labkey.api.util.FileUtil;
2224
import org.labkey.api.util.MemTracker;
25+
import org.labkey.vfs.FileLike;
2326

2427
import java.io.File;
28+
import java.nio.file.Paths;
2529
import java.util.Date;
2630

2731
/**
@@ -167,4 +171,10 @@ public void setStatusEnum(Status statusEnum)
167171
{
168172
_status = statusEnum.getStatusId();
169173
}
174+
175+
@JsonIgnore
176+
public FileLike getWorkingDir()
177+
{
178+
return PipelineService.get().findPipelineRoot(getContainer()).resolvePathToFileLike(PipelineService.get().findPipelineRoot(getContainer()).relativePath(Paths.get(getPath())));
179+
}
170180
}

genotyping/src/org/labkey/genotyping/Import454ReadsJob.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
import org.labkey.api.util.FileUtil;
3131
import org.labkey.api.util.Formats;
3232
import org.labkey.api.view.ViewBackgroundInfo;
33+
import org.labkey.vfs.FileLike;
34+
import org.labkey.vfs.FileSystemLike;
3335

3436
import java.io.File;
3537
import java.io.IOException;
@@ -65,8 +67,9 @@ protected Import454ReadsJob(@JsonProperty("_reads") File reads)
6567
public Import454ReadsJob(ViewBackgroundInfo info, PipeRoot root, File reads, GenotypingRun run)
6668
{
6769
super(Import454ReadsPipelineProvider.NAME, info, root, run);
68-
_reads = reads;
69-
setLogFile(new File(_reads.getParentFile(), FileUtil.makeFileNameWithTimestamp("import_reads", "log")));
70+
FileLike verifiedFileLike = FileSystemLike.getVerifiedFileLike(root.getContainer(), reads.getAbsolutePath());
71+
_reads = FileSystemLike.toFile(verifiedFileLike);
72+
setLogFile(verifiedFileLike.getParent().resolveChild(FileUtil.makeFileNameWithTimestamp("import_reads", "log")).toNioPathForWrite());
7073
}
7174

7275
@Override

genotyping/src/org/labkey/genotyping/ImportAnalysisJob.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@
3636
import org.labkey.api.view.ViewBackgroundInfo;
3737
import org.labkey.genotyping.sequences.SequenceDictionary;
3838
import org.labkey.genotyping.sequences.SequenceManager;
39+
import org.labkey.vfs.FileLike;
3940

40-
import java.io.File;
4141
import java.io.IOException;
4242
import java.sql.SQLException;
4343
import java.util.Map;
@@ -50,21 +50,21 @@
5050
*/
5151
public class ImportAnalysisJob extends PipelineJob
5252
{
53-
private File _dir;
53+
private FileLike _dir;
5454
private GenotypingAnalysis _analysis;
5555

5656
// For serialization
5757
protected ImportAnalysisJob() {}
5858

59-
public ImportAnalysisJob(ViewBackgroundInfo info, PipeRoot root, File pipelineDir, GenotypingAnalysis analysis)
59+
public ImportAnalysisJob(ViewBackgroundInfo info, PipeRoot root, FileLike pipelineDir, GenotypingAnalysis analysis)
6060
{
6161
super("Import Analysis", info, root);
6262
_dir = pipelineDir;
6363
_analysis = analysis;
64-
setLogFile(new File(_dir, FileUtil.makeFileNameWithTimestamp("import_analysis", "log")));
64+
setLogFile(_dir.resolveChild(FileUtil.makeFileNameWithTimestamp("import_analysis", "log")).toNioPathForWrite());
6565

6666
if (!_dir.exists())
67-
throw new IllegalArgumentException("Pipeline directory does not exist: " + _dir.getAbsolutePath());
67+
throw new IllegalArgumentException("Pipeline directory does not exist: " + _dir.toNioPathForRead().toAbsolutePath());
6868

6969
if (null == _analysis)
7070
throw new IllegalArgumentException("Analysis was not specified");
@@ -92,7 +92,7 @@ public void run()
9292

9393
try
9494
{
95-
File sourceMatches = new File(_dir, GenotypingManager.MATCHES_FILE_NAME);
95+
FileLike sourceMatches = _dir.resolveChild(GenotypingManager.MATCHES_FILE_NAME);
9696
GenotypingSchema gs = GenotypingSchema.get();
9797
DbSchema schema = gs.getSchema();
9898
TempTableInfo matches = null;
@@ -180,9 +180,9 @@ public void run()
180180

181181

182182
// columnNames: comma-separated list of column names to include; null means include all columns
183-
private TempTableInfo createTempTable(File file, @Nullable String columnNames) throws IOException, SQLException
183+
private TempTableInfo createTempTable(FileLike file, @Nullable String columnNames) throws IOException, SQLException
184184
{
185-
try (TabLoader loader = new TabLoader(file, true))
185+
try (TabLoader loader = new TabLoader(file.toNioPathForRead().toFile(), true))
186186
{
187187
// Load only the specified columns
188188
if (null != columnNames)

genotyping/src/org/labkey/genotyping/ImportIlluminaReadsJob.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@
3434
import org.labkey.api.util.FileUtil;
3535
import org.labkey.api.util.Pair;
3636
import org.labkey.api.view.ViewBackgroundInfo;
37+
import org.labkey.vfs.FileLike;
38+
import org.labkey.vfs.FileSystemLike;
3739

3840
import java.io.File;
3941
import java.io.IOException;
@@ -71,9 +73,10 @@ protected ImportIlluminaReadsJob(@JsonProperty("_sampleFile") File sampleFile, @
7173
public ImportIlluminaReadsJob(ViewBackgroundInfo info, PipeRoot root, File sampleFile, GenotypingRun run, @Nullable String fastqPrefix)
7274
{
7375
super(ImportIlluminaReadsPipelineProvider.NAME, info, root, run);
74-
_sampleFile = sampleFile;
76+
FileLike verifiedFileLike = FileSystemLike.getVerifiedFileLike(root.getContainer(), sampleFile.getAbsolutePath());
77+
_sampleFile = FileSystemLike.toFile(verifiedFileLike);
7578
_fastqPrefix = fastqPrefix;
76-
setLogFile(new File(_sampleFile.getParentFile(), FileUtil.makeFileNameWithTimestamp("import_reads", "log")));
79+
setLogFile(verifiedFileLike.getParent().resolveChild(FileUtil.makeFileNameWithTimestamp("import_reads", "log")).toNioPathForWrite());
7780
}
7881

7982
@Override

0 commit comments

Comments
 (0)