Skip to content

Commit 566bca1

Browse files
authored
Bugfix to Pipeline StepType when using a subclass (#139)
* Bugfix to Pipeline StepType when using a subclass
1 parent b970a7d commit 566bca1

File tree

7 files changed

+181
-146
lines changed

7 files changed

+181
-146
lines changed

SequenceAnalysis/src/org/labkey/sequenceanalysis/SequencePipelineServiceImpl.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,6 @@ public <StepType extends PipelineStep> Set<PipelineStepProvider<StepType>> getPr
105105
{
106106
ParameterizedType parameterizedType = (ParameterizedType)provider.getClass().getGenericSuperclass();
107107
Class clazz = (Class)parameterizedType.getActualTypeArguments()[0];
108-
109108
if (stepType.isAssignableFrom(clazz))
110109
{
111110
ret.add(provider);
Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
package org.labkey.api.singlecell.pipeline;
2+
3+
import com.fasterxml.jackson.annotation.JsonIgnore;
4+
import org.jetbrains.annotations.Nullable;
5+
import org.labkey.api.pipeline.PipelineJobException;
6+
import org.labkey.api.sequenceanalysis.SequenceOutputFile;
7+
import org.labkey.api.sequenceanalysis.pipeline.PipelineStep;
8+
import org.labkey.api.sequenceanalysis.pipeline.PipelineStepOutput;
9+
import org.labkey.api.sequenceanalysis.pipeline.SequenceOutputHandler;
10+
11+
import java.io.File;
12+
import java.io.Serializable;
13+
import java.util.Collection;
14+
import java.util.List;
15+
16+
public interface AbstractSingleCellStep extends PipelineStep
17+
{
18+
public Collection<String> getRLibraries();
19+
20+
public String getDockerContainerName();
21+
22+
default void init(SequenceOutputHandler.JobContext ctx, List<SequenceOutputFile> inputFiles) throws PipelineJobException
23+
{
24+
25+
}
26+
27+
default boolean createsSeuratObjects()
28+
{
29+
return true;
30+
}
31+
32+
public boolean requiresCiteSeq();
33+
34+
public boolean requiresHashing();
35+
36+
public boolean isIncluded(SequenceOutputHandler.JobContext ctx, List<SequenceOutputFile> inputs) throws PipelineJobException;
37+
38+
default String getFileSuffix()
39+
{
40+
return getProvider().getName();
41+
}
42+
43+
public Output execute(SequenceOutputHandler.JobContext ctx, List<SeuratObjectWrapper> inputObjects, String outputPrefix) throws PipelineJobException;
44+
45+
public static interface Output extends PipelineStepOutput
46+
{
47+
/**
48+
* Returns the cached seurat object
49+
*/
50+
public List<SeuratObjectWrapper> getSeuratObjects();
51+
52+
public File getMarkdownFile();
53+
54+
public File getHtmlFile();
55+
}
56+
57+
public static class SeuratObjectWrapper implements Serializable
58+
{
59+
private transient SequenceOutputFile _sequenceOutputFile;
60+
61+
private Integer _sequenceOutputFileId;
62+
private Integer _readsetId;
63+
64+
private File _file;
65+
private String _datasetId;
66+
private String _datasetName;
67+
68+
//For serialization
69+
public SeuratObjectWrapper()
70+
{
71+
72+
}
73+
74+
public SeuratObjectWrapper(String datasetId, String datasetName, File file, SequenceOutputFile sequenceOutputFile)
75+
{
76+
_datasetId = datasetId;
77+
_datasetName = datasetName;
78+
_file = file;
79+
_sequenceOutputFileId = sequenceOutputFile.getRowid();
80+
_sequenceOutputFile = sequenceOutputFile;
81+
_readsetId = sequenceOutputFile.getReadset();
82+
83+
}
84+
85+
public SeuratObjectWrapper(String datasetId, String datasetName, File file, @Nullable Integer sequenceOutputFileId, @Nullable Integer readsetId)
86+
{
87+
_datasetId = datasetId;
88+
_datasetName = datasetName;
89+
_file = file;
90+
_sequenceOutputFileId = sequenceOutputFileId;
91+
_sequenceOutputFile = null;
92+
_readsetId = readsetId;
93+
}
94+
95+
public File getFile()
96+
{
97+
return _file;
98+
}
99+
100+
public void setFile(File file)
101+
{
102+
_file = file;
103+
}
104+
105+
public String getDatasetId()
106+
{
107+
return _datasetId;
108+
}
109+
110+
public void setDatasetId(String datasetId)
111+
{
112+
_datasetId = datasetId;
113+
}
114+
115+
public String getDatasetName()
116+
{
117+
return _datasetName;
118+
}
119+
120+
public void setDatasetName(String datasetName)
121+
{
122+
_datasetName = datasetName;
123+
}
124+
125+
public Integer getReadsetId()
126+
{
127+
return _readsetId;
128+
}
129+
130+
public void setReadsetId(Integer readsetId)
131+
{
132+
_readsetId = readsetId;
133+
}
134+
135+
public Integer getSequenceOutputFileId()
136+
{
137+
return _sequenceOutputFileId;
138+
}
139+
140+
public void setSequenceOutputFileId(Integer sequenceOutputFileId)
141+
{
142+
_sequenceOutputFileId = sequenceOutputFileId;
143+
}
144+
145+
@JsonIgnore
146+
public SequenceOutputFile getSequenceOutputFile()
147+
{
148+
return _sequenceOutputFile;
149+
}
150+
151+
@JsonIgnore
152+
public void setSequenceOutputFile(SequenceOutputFile sequenceOutputFile)
153+
{
154+
_sequenceOutputFile = sequenceOutputFile;
155+
}
156+
}
157+
}

singlecell/api-src/org/labkey/api/singlecell/pipeline/SingleCellRawDataStep.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
/**
44
* NOTE: this is a special class designed to encompass the steps related to processing raw count data from the 10x/loupe matrix
55
*/
6-
public interface SingleCellRawDataStep extends SingleCellStep
6+
public interface SingleCellRawDataStep extends AbstractSingleCellStep
77
{
88
public final String STEP_TYPE = "singleCellRawData";
99
}

singlecell/api-src/org/labkey/api/singlecell/pipeline/SingleCellStep.java

Lines changed: 1 addition & 141 deletions
Original file line numberDiff line numberDiff line change
@@ -13,147 +13,7 @@
1313
import java.util.Collection;
1414
import java.util.List;
1515

16-
public interface SingleCellStep extends PipelineStep
16+
public interface SingleCellStep extends AbstractSingleCellStep
1717
{
1818
public static final String STEP_TYPE = "singleCell";
19-
20-
public Collection<String> getRLibraries();
21-
22-
public String getDockerContainerName();
23-
24-
default void init(SequenceOutputHandler.JobContext ctx, List<SequenceOutputFile> inputFiles) throws PipelineJobException
25-
{
26-
27-
}
28-
29-
default boolean createsSeuratObjects()
30-
{
31-
return true;
32-
}
33-
34-
public boolean requiresCiteSeq();
35-
36-
public boolean requiresHashing();
37-
38-
public boolean isIncluded(SequenceOutputHandler.JobContext ctx, List<SequenceOutputFile> inputs) throws PipelineJobException;
39-
40-
default String getFileSuffix()
41-
{
42-
return getProvider().getName();
43-
}
44-
45-
public Output execute(SequenceOutputHandler.JobContext ctx, List<SeuratObjectWrapper> inputObjects, String outputPrefix) throws PipelineJobException;
46-
47-
public static interface Output extends PipelineStepOutput
48-
{
49-
/**
50-
* Returns the cached seurat object
51-
*/
52-
public List<SeuratObjectWrapper> getSeuratObjects();
53-
54-
public File getMarkdownFile();
55-
56-
public File getHtmlFile();
57-
}
58-
59-
public static class SeuratObjectWrapper implements Serializable
60-
{
61-
private transient SequenceOutputFile _sequenceOutputFile;
62-
63-
private Integer _sequenceOutputFileId;
64-
private Integer _readsetId;
65-
66-
private File _file;
67-
private String _datasetId;
68-
private String _datasetName;
69-
70-
//For serialization
71-
public SeuratObjectWrapper()
72-
{
73-
74-
}
75-
76-
public SeuratObjectWrapper(String datasetId, String datasetName, File file, SequenceOutputFile sequenceOutputFile)
77-
{
78-
_datasetId = datasetId;
79-
_datasetName = datasetName;
80-
_file = file;
81-
_sequenceOutputFileId = sequenceOutputFile.getRowid();
82-
_sequenceOutputFile = sequenceOutputFile;
83-
_readsetId = sequenceOutputFile.getReadset();
84-
85-
}
86-
87-
public SeuratObjectWrapper(String datasetId, String datasetName, File file, @Nullable Integer sequenceOutputFileId, @Nullable Integer readsetId)
88-
{
89-
_datasetId = datasetId;
90-
_datasetName = datasetName;
91-
_file = file;
92-
_sequenceOutputFileId = sequenceOutputFileId;
93-
_sequenceOutputFile = null;
94-
_readsetId = readsetId;
95-
}
96-
97-
public File getFile()
98-
{
99-
return _file;
100-
}
101-
102-
public void setFile(File file)
103-
{
104-
_file = file;
105-
}
106-
107-
public String getDatasetId()
108-
{
109-
return _datasetId;
110-
}
111-
112-
public void setDatasetId(String datasetId)
113-
{
114-
_datasetId = datasetId;
115-
}
116-
117-
public String getDatasetName()
118-
{
119-
return _datasetName;
120-
}
121-
122-
public void setDatasetName(String datasetName)
123-
{
124-
_datasetName = datasetName;
125-
}
126-
127-
public Integer getReadsetId()
128-
{
129-
return _readsetId;
130-
}
131-
132-
public void setReadsetId(Integer readsetId)
133-
{
134-
_readsetId = readsetId;
135-
}
136-
137-
public Integer getSequenceOutputFileId()
138-
{
139-
return _sequenceOutputFileId;
140-
}
141-
142-
public void setSequenceOutputFileId(Integer sequenceOutputFileId)
143-
{
144-
_sequenceOutputFileId = sequenceOutputFileId;
145-
}
146-
147-
@JsonIgnore
148-
public SequenceOutputFile getSequenceOutputFile()
149-
{
150-
return _sequenceOutputFile;
151-
}
152-
153-
@JsonIgnore
154-
public void setSequenceOutputFile(SequenceOutputFile sequenceOutputFile)
155-
{
156-
_sequenceOutputFile = sequenceOutputFile;
157-
}
158-
}
15919
}

singlecell/src/org/labkey/singlecell/SingleCellController.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ public SingleCellController()
9292
}
9393

9494
@RequiresPermission(InsertPermission.class)
95-
public class DownloadLoupeDataAction extends ExportAction<OutputFilesForm>
95+
public static class DownloadLoupeDataAction extends ExportAction<OutputFilesForm>
9696
{
9797
@Override
9898
public void export(OutputFilesForm form, HttpServletResponse response, BindException errors) throws Exception
@@ -461,7 +461,7 @@ else if (count > 1 && filter.getClauses().size() == FIELDS.size())
461461
}
462462

463463
@RequiresPermission(InsertPermission.class)
464-
public class SingleCellProcessingAction extends SimpleViewAction<Object>
464+
public static class SingleCellProcessingAction extends SimpleViewAction<Object>
465465
{
466466
public URLHelper getSuccessURL(Object form)
467467
{

singlecell/src/org/labkey/singlecell/SingleCellModule.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,8 @@ public static void registerPipelineSteps()
179179
public Set<Class> getUnitTests()
180180
{
181181
return PageFlowUtil.set(
182-
AbstractSingleCellHandler.TestCase.class
182+
AbstractSingleCellHandler.TestCase.class,
183+
PrepareRawCounts.TestCase.class
183184
);
184185
}
185186
}

singlecell/src/org/labkey/singlecell/pipeline/singlecell/PrepareRawCounts.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,18 @@
11
package org.labkey.singlecell.pipeline.singlecell;
22

3+
import org.apache.logging.log4j.Logger;
4+
import org.junit.Assert;
5+
import org.junit.Test;
6+
import org.labkey.api.pipeline.PipelineJob;
7+
import org.labkey.api.pipeline.WorkDirectory;
38
import org.labkey.api.sequenceanalysis.pipeline.AbstractPipelineStepProvider;
49
import org.labkey.api.sequenceanalysis.pipeline.PipelineContext;
10+
import org.labkey.api.sequenceanalysis.pipeline.SequenceAnalysisJobSupport;
11+
import org.labkey.api.sequenceanalysis.pipeline.SequencePipelineService;
512
import org.labkey.api.singlecell.pipeline.SeuratToolParameter;
613
import org.labkey.api.singlecell.pipeline.SingleCellRawDataStep;
714

15+
import java.io.File;
816
import java.util.Arrays;
917

1018
public class PrepareRawCounts extends AbstractCellMembraneStep
@@ -41,4 +49,14 @@ public String getFileSuffix()
4149
{
4250
return "counts";
4351
}
52+
53+
public static class TestCase extends Assert
54+
{
55+
@Test
56+
public void testStepClass()
57+
{
58+
assertEquals(SingleCellRawDataStep.STEP_TYPE, SequencePipelineService.get().getParamNameForStepType(SingleCellRawDataStep.class));
59+
assertEquals(SingleCellRawDataStep.class, new Provider().getStepClass());
60+
}
61+
}
4462
}

0 commit comments

Comments
 (0)