1616
1717package org .labkey .jbrowse ;
1818
19+ import com .google .gson .stream .JsonReader ;
1920import htsjdk .samtools .util .CloseableIterator ;
2021import htsjdk .variant .variantcontext .Genotype ;
2122import htsjdk .variant .variantcontext .VariantContext ;
2223import htsjdk .variant .vcf .VCFFileReader ;
24+ import org .apache .commons .io .IOUtils ;
2325import org .apache .commons .lang3 .StringUtils ;
2426import org .jetbrains .annotations .NotNull ;
2527import org .json .JSONArray ;
2628import org .json .JSONObject ;
29+ import org .json .JSONTokener ;
2730import org .labkey .api .action .ApiResponse ;
2831import org .labkey .api .action .ApiSimpleResponse ;
2932import org .labkey .api .action .MutatingApiAction ;
4548import org .labkey .api .data .TableInfo ;
4649import org .labkey .api .data .TableSelector ;
4750import org .labkey .api .exp .api .ExpData ;
51+ import org .labkey .api .module .Module ;
52+ import org .labkey .api .module .ModuleLoader ;
4853import org .labkey .api .pipeline .PipeRoot ;
4954import org .labkey .api .pipeline .PipelineService ;
5055import org .labkey .api .pipeline .PipelineValidationException ;
5156import org .labkey .api .query .FieldKey ;
5257import org .labkey .api .query .QueryService ;
5358import org .labkey .api .query .UserSchema ;
59+ import org .labkey .api .resource .FileResource ;
5460import org .labkey .api .security .RequiresPermission ;
5561import org .labkey .api .security .permissions .AdminOperationsPermission ;
5662import org .labkey .api .security .permissions .AdminPermission ;
5965import org .labkey .api .security .permissions .UpdatePermission ;
6066import org .labkey .api .util .ExceptionUtil ;
6167import org .labkey .api .util .PageFlowUtil ;
68+ import org .labkey .api .util .Path ;
6269import org .labkey .api .view .JspView ;
6370import org .labkey .api .view .NavTree ;
6471import org .labkey .api .view .UnauthorizedException ;
6774import org .labkey .jbrowse .model .Database ;
6875import org .labkey .jbrowse .model .JsonFile ;
6976import org .labkey .jbrowse .pipeline .JBrowseSessionPipelineJob ;
77+ import org .labkey .sequenceanalysis .SequenceAnalysisModule ;
7078import org .springframework .validation .BindException ;
7179import org .springframework .validation .Errors ;
7280import org .springframework .web .servlet .ModelAndView ;
7381
82+ import java .io .File ;
83+ import java .io .FileInputStream ;
7484import java .io .IOException ;
85+ import java .io .FileNotFoundException ;
86+ import java .io .InputStream ;
87+ import java .nio .charset .StandardCharsets ;
7588import java .sql .SQLException ;
7689import java .util .ArrayList ;
7790import java .util .Arrays ;
8295import java .util .Map ;
8396import java .util .Set ;
8497
98+
99+ import java .nio .file .Files ;
100+
85101public class JBrowseController extends SpringActionController
86102{
87103 private static final DefaultActionResolver _actionResolver = new DefaultActionResolver (JBrowseController .class );
@@ -704,4 +720,63 @@ public void setStop(Integer stop)
704720 _stop = stop ;
705721 }
706722 }
707- }
723+
724+ public static class GetSessionForm
725+ {
726+ private String session ;
727+
728+ public String getSession ()
729+ {
730+ return session ;
731+ }
732+
733+ public void setSession (String session )
734+ {
735+ this .session = session ;
736+ }
737+ }
738+
739+ @ RequiresPermission (ReadPermission .class )
740+ public class GetSessionAction extends ReadOnlyApiAction <GetSessionForm >
741+ {
742+ private static final String DEMO = "demo" ;
743+
744+ @ Override
745+ public void validateForm (GetSessionForm form , Errors errors )
746+ {
747+ if (StringUtils .isEmpty (form .getSession ()))
748+ {
749+ errors .reject (ERROR_MSG , "Must provide the session Id" );
750+ }
751+ }
752+
753+ @ Override
754+ public Object execute (GetSessionForm form , BindException errors ) throws Exception
755+ {
756+ JSONObject resp ;
757+ if (DEMO .equalsIgnoreCase (form .getSession ()))
758+ {
759+ Module module = ModuleLoader .getInstance ().getModule (JBrowseModule .class );
760+ FileResource r = (FileResource )module .getModuleResolver ().lookup (Path .parse ("external/minimalSession.json" ));
761+ File jsonFile = r .getFile ();
762+ if (jsonFile == null )
763+ {
764+ throw new FileNotFoundException ("Unable to find JSON file: external/minimalSession.json" );
765+ }
766+
767+
768+ try (InputStream is = new FileInputStream (jsonFile ))
769+ {
770+ resp = new JSONObject (IOUtils .toString (is , StandardCharsets .UTF_8 ));
771+ }
772+ }
773+ else
774+ {
775+ resp = null ;
776+ }
777+
778+ return new ApiSimpleResponse (resp );
779+ }
780+ }
781+ }
782+
0 commit comments