Skip to content

Commit 3dfea00

Browse files
authored
Merge pull request #179 from LabKey/fb_merge_23.7_to_develop
Merge discvr-23.7 to develop
2 parents 5a27066 + 6623f74 commit 3dfea00

File tree

72 files changed

+11094
-21047
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

72 files changed

+11094
-21047
lines changed

IDR/build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ plugins {
66

77
dependencies
88
{
9-
implementation "com.sun.mail:jakarta.mail:${javaMailVersion}"
109
implementation project(path: ':server:modules:LabDevKitModules:LDK')
1110
BuildUtils.addLabKeyDependency(project: project, config: "implementation", depProjectPath: ":server:modules:LabDevKitModules:LDK", depProjectConfig: "apiJarFile")
1211
BuildUtils.addLabKeyDependency(project: project, config: "implementation", depProjectPath: ":server:modules:ehrModules:ehr", depProjectConfig: "apiJarFile")
@@ -16,4 +15,6 @@ dependencies
1615
BuildUtils.addLabKeyDependency(project: project, config: "modules", depProjectPath: ":server:modules:dataintegration", depProjectConfig: 'published', depExtension: 'module')
1716
BuildUtils.addLabKeyDependency(project: project, config: "modules", depProjectPath: ":server:modules:premium", depProjectConfig: 'published', depExtension: 'module')
1817
BuildUtils.addLabKeyDependency(project: project, config: "modules", depProjectPath: ":server:modules:ehrModules:ehr", depProjectConfig: 'published', depExtension: 'module')
18+
BuildUtils.addLabKeyDependency(project: project, config: "modules", depProjectPath: ":server:modules:DiscvrLabKeyModules:Studies", depProjectConfig: "published", depExtension: "module")
19+
BuildUtils.addLabKeyDependency(project: project, config: "implementation", depProjectPath: ":server:modules:DiscvrLabKeyModules:Studies", depProjectConfig: "apiJarFile")
1920
}

IDR/src/org/labkey/idr/IDRController.java

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,24 @@
11
package org.labkey.idr;
22

3+
import org.jetbrains.annotations.NotNull;
4+
import org.labkey.api.action.ConfirmAction;
35
import org.labkey.api.action.SpringActionController;
6+
import org.labkey.api.ehr.EHRService;
7+
import org.labkey.api.module.Module;
8+
import org.labkey.api.module.ModuleLoader;
9+
import org.labkey.api.module.ModuleProperty;
10+
import org.labkey.api.pipeline.PipelineUrls;
11+
import org.labkey.api.security.RequiresPermission;
12+
import org.labkey.api.security.permissions.AdminPermission;
13+
import org.labkey.api.studies.StudiesService;
14+
import org.labkey.api.util.HtmlString;
15+
import org.labkey.api.util.PageFlowUtil;
16+
import org.labkey.api.util.Path;
17+
import org.labkey.api.util.URLHelper;
18+
import org.labkey.api.view.HtmlView;
19+
import org.springframework.validation.BindException;
20+
import org.springframework.validation.Errors;
21+
import org.springframework.web.servlet.ModelAndView;
422

523
public class IDRController extends SpringActionController
624
{
@@ -12,4 +30,43 @@ public IDRController()
1230
setActionResolver(_actionResolver);
1331
}
1432

33+
@RequiresPermission(AdminPermission.class)
34+
public static class ImportStudyAction extends ConfirmAction<Object>
35+
{
36+
@Override
37+
public ModelAndView getConfirmView(Object o, BindException errors) throws Exception
38+
{
39+
setTitle("Import mGAP Study");
40+
41+
return new HtmlView(HtmlString.unsafe("This will import the default IDR study in this folder and set the EHRStudyContainer property to point to this container. Do you want to continue?"));
42+
}
43+
44+
@Override
45+
public boolean handlePost(Object o, BindException errors) throws Exception
46+
{
47+
Module ehr = ModuleLoader.getInstance().getModule("ehr");
48+
ModuleProperty mp = ehr.getModuleProperties().get("EHRStudyContainer");
49+
mp.saveValue(getUser(), getContainer(), getContainer().getPath());
50+
51+
StudiesService.get().importFolderDefinition(getContainer(), getUser(), ModuleLoader.getInstance().getModule(IDRModule.NAME), new Path("referenceStudy"));
52+
53+
EHRService.get().ensureStudyQCStates(getContainer(), getUser(), true);
54+
55+
return true;
56+
}
57+
58+
@Override
59+
public void validateCommand(Object o, Errors errors)
60+
{
61+
62+
}
63+
64+
@NotNull
65+
@Override
66+
public URLHelper getSuccessURL(Object o)
67+
{
68+
return PageFlowUtil.urlProvider(PipelineUrls.class).urlBegin(getContainer());
69+
}
70+
}
71+
1572
}

PMR/build.gradle

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import org.labkey.gradle.util.BuildUtils
2+
3+
plugins {
4+
id 'org.labkey.build.module'
5+
}
6+
7+
dependencies {
8+
BuildUtils.addLabKeyDependency(project: project, config: "modules", depProjectPath: ":server:modules:DiscvrLabKeyModules:Studies", depProjectConfig: "published", depExtension: "module")
9+
BuildUtils.addLabKeyDependency(project: project, config: "modules", depProjectPath: ":server:modules:dataintegration", depProjectConfig: "published", depExtension: "module")
10+
BuildUtils.addLabKeyDependency(project: project, config: "modules", depProjectPath: ":server:modules:DiscvrLabKeyModules:discvrcore", depProjectConfig: "published", depExtension: "module")
11+
12+
BuildUtils.addLabKeyDependency(project: project, config: "implementation", depProjectPath: ":server:modules:DiscvrLabKeyModules:Studies", depProjectConfig: "apiJarFile")
13+
BuildUtils.addLabKeyDependency(project: project, config: "implementation", depProjectPath: ":server:modules:dataintegration", depProjectConfig: "apiJarFile")
14+
BuildUtils.addLabKeyDependency(project: project, config: "implementation", depProjectPath: ":server:modules:ehrModules:ehr", depProjectConfig: "apiJarFile")
15+
}

PMR/module.properties

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
ModuleClass: org.labkey.pmr.PMRModule
2+
Label: PMR
3+
Description: This is the ONPRC Precision Medicine Resource (PMR) module
4+
License: Apache 2.0
5+
LicenseURL: http://www.apache.org/licenses/LICENSE-2.0
Lines changed: 164 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<etl xmlns="http://labkey.org/etl/xml">
3+
<name>PMR_ClinicalData</name>
4+
<description>PMR/EHR Clinical Data</description>
5+
<transforms>
6+
<transform id="dataset1" type="RemoteQueryTransformStep">
7+
<source schemaName="study" queryName="chemistryResults" remoteSource="EHR_ClinicalSource" timestampColumnName="modified">
8+
<sourceColumns>
9+
<column>Id</column>
10+
<column>date</column>
11+
<column>ageAtTime</column>
12+
<column>testId</column>
13+
<column>result</column>
14+
<column>units</column>
15+
<column>runid</column>
16+
<column>objectid</column>
17+
</sourceColumns>
18+
</source>
19+
<destination schemaName="study" queryName="chemistryResults" targetOption="merge" bulkLoad="true" batchSize="2500">
20+
21+
</destination>
22+
</transform>
23+
<transform id="dataset2" type="RemoteQueryTransformStep">
24+
<source schemaName="study" queryName="demographics" remoteSource="EHR_ClinicalSource" timestampColumnName="modified">
25+
<sourceColumns>
26+
<column>Id</column>
27+
<column>date</column>
28+
<column>gender</column>
29+
<column>species</column>
30+
<column>geographic_origin</column>
31+
<column>birth</column>
32+
<column>death</column>
33+
<column>status</column>
34+
<column>calculated_status</column>
35+
<column>QCState</column>
36+
<column>objectid</column>
37+
</sourceColumns>
38+
</source>
39+
<destination schemaName="study" queryName="demographics" targetOption="merge" bulkLoad="true" batchSize="2500">
40+
41+
</destination>
42+
</transform>
43+
<transform id="dataset3" type="RemoteQueryTransformStep">
44+
<source schemaName="study" queryName="microbiology" remoteSource="EHR_ClinicalSource" timestampColumnName="modified">
45+
<sourceColumns>
46+
<column>Id</column>
47+
<column>date</column>
48+
<column>ageAtTime</column>
49+
<column>tissue</column>
50+
<column>organism</column>
51+
<column>quantity</column>
52+
<column>runid</column>
53+
<column>objectid</column>
54+
</sourceColumns>
55+
</source>
56+
<destination schemaName="study" queryName="microbiology" targetOption="merge" bulkLoad="true" batchSize="2500">
57+
58+
</destination>
59+
</transform>
60+
<transform id="dataset4" type="RemoteQueryTransformStep">
61+
<source schemaName="study" queryName="weight" remoteSource="EHR_ClinicalSource" timestampColumnName="modified">
62+
<sourceColumns>
63+
<column>Id</column>
64+
<column>date</column>
65+
<column>ageAtTime</column>
66+
<column>weight</column>
67+
<column>objectid</column>
68+
</sourceColumns>
69+
</source>
70+
<destination schemaName="study" queryName="weight" targetOption="merge" bulkLoad="true" batchSize="2500">
71+
72+
</destination>
73+
</transform>
74+
<transform id="dataset5" type="RemoteQueryTransformStep">
75+
<source schemaName="study" queryName="clinpathRuns" remoteSource="EHR_ClinicalSource" timestampColumnName="modified">
76+
<sourceColumns>
77+
<column>Id</column>
78+
<column>date</column>
79+
<column>ageAtTime</column>
80+
<column>type</column>
81+
<column>tissue</column>
82+
<column>units</column>
83+
<column>servicerequested</column>
84+
<column>collectionMethod</column>
85+
<column>method</column>
86+
<column>objectid</column>
87+
</sourceColumns>
88+
</source>
89+
<destination schemaName="study" queryName="clinpathRuns" bulkLoad="true" targetOption="merge">
90+
91+
</destination>
92+
</transform>
93+
<transform id="dataset6" type="RemoteQueryTransformStep">
94+
<source schemaName="study" queryName="hematologyResults" remoteSource="EHR_ClinicalSource" timestampColumnName="modified">
95+
<sourceColumns>
96+
<column>Id</column>
97+
<column>date</column>
98+
<column>ageAtTime</column>
99+
<column>testid</column>
100+
<column>result</column>
101+
<column>units</column>
102+
<column>runid</column>
103+
<column>objectid</column>
104+
</sourceColumns>
105+
</source>
106+
<destination schemaName="study" queryName="hematologyResults" targetOption="merge" bulkLoad="true" batchSize="2500">
107+
108+
</destination>
109+
</transform>
110+
<transform id="dataset7" type="RemoteQueryTransformStep">
111+
<source schemaName="study" queryName="pathologyDiagnoses" remoteSource="EHR_ClinicalSource" timestampColumnName="modified" sourceTimeout="0">
112+
<sourceColumns>
113+
<column>Id</column>
114+
<column>date</column>
115+
<column>ageAtTime</column>
116+
<column>sort_order</column>
117+
<column>codes</column>
118+
<column>objectid</column>
119+
</sourceColumns>
120+
</source>
121+
<destination schemaName="study" queryName="pathologyDiagnoses" targetOption="merge" bulkLoad="true" batchSize="2500">
122+
123+
</destination>
124+
</transform>
125+
<transform id="dataset8" type="RemoteQueryTransformStep">
126+
<source schemaName="study" queryName="histology" remoteSource="EHR_ClinicalSource" timestampColumnName="modified" sourceTimeout="0">
127+
<sourceColumns>
128+
<column>Id</column>
129+
<column>date</column>
130+
<column>ageAtTime</column>
131+
<column>sort_order</column>
132+
<column>tissue</column>
133+
<column>codes</column>
134+
<column>objectid</column>
135+
</sourceColumns>
136+
</source>
137+
<destination schemaName="study" queryName="histology" targetOption="merge" bulkLoad="true" batchSize="2500">
138+
139+
</destination>
140+
</transform>
141+
<transform id="dataset9" type="RemoteQueryTransformStep">
142+
<source schemaName="study" queryName="parentage" remoteSource="EHR_ClinicalSource" timestampColumnName="modified" sourceTimeout="0">
143+
<sourceColumns>
144+
<column>Id</column>
145+
<column>date</column>
146+
<column>parent</column>
147+
<column>relationship</column>
148+
<column>method</column>
149+
<column>objectid</column>
150+
</sourceColumns>
151+
</source>
152+
<destination schemaName="study" queryName="parentage" targetOption="merge" bulkLoad="true" batchSize="2500">
153+
154+
</destination>
155+
</transform>
156+
</transforms>
157+
<incrementalFilter className="ModifiedSinceFilterStrategy" timestampColumnName="modified" pkColumnName="objectid">
158+
<!--TODO-->
159+
<deletedRowsSource remoteSource="PRIMESEQ_MHC" schemaName="pmr" queryName="study_delete_source" deletedSourceKeyColumnName="objectid" targetKeyColumnName="objectid" />
160+
</incrementalFilter>
161+
<schedule>
162+
<cron expression="0 30 1 * * ?"/>
163+
</schedule>
164+
</etl>
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
<folderType xmlns="http://labkey.org/data/xml/folderType">
2+
<name>PMR</name>
3+
<description>The default folder layout for the PMR</description>
4+
<folderTabs>
5+
<folderTab>
6+
<name>overview</name>
7+
<caption>Overview</caption>
8+
<preferredWebParts>
9+
<webPart>
10+
<name>PMR Overview</name>
11+
<location>body</location>
12+
</webPart>
13+
</preferredWebParts>
14+
</folderTab>
15+
<folderTab>
16+
<name>animalHistory</name>
17+
<caption>Animal History</caption>
18+
<selectors>
19+
<selector>
20+
<view>animalHistory</view>
21+
</selector>
22+
</selectors>
23+
<preferredWebParts>
24+
<webPart>
25+
<name>PMR Animal History</name>
26+
<location>body</location>
27+
</webPart>
28+
</preferredWebParts>
29+
</folderTab>
30+
<folderTab>
31+
<name>animalSearch</name>
32+
<caption>Animal Search</caption>
33+
<selectors>
34+
<selector>
35+
<view>animalSearch</view>
36+
</selector>
37+
</selectors>
38+
<preferredWebParts>
39+
<webPart>
40+
<name>PMR Animal Search</name>
41+
<location>body</location>
42+
</webPart>
43+
</preferredWebParts>
44+
</folderTab>
45+
<folderTab>
46+
<name>admin</name>
47+
<caption>Admin</caption>
48+
<selectors>
49+
<selector>
50+
<view>admin</view>
51+
</selector>
52+
</selectors>
53+
<preferredWebParts>
54+
<webPart>
55+
<name>PMR Admin</name>
56+
<location>body</location>
57+
</webPart>
58+
</preferredWebParts>
59+
<permissions>
60+
<permission name="org.labkey.api.security.permissions.AdminPermission"/>
61+
</permissions>
62+
</folderTab>
63+
</folderTabs>
64+
<modules>
65+
<moduleName>PMR</moduleName>
66+
<moduleName>EHR</moduleName>
67+
</modules>
68+
<defaultModule>PMR</defaultModule>
69+
</folderType>
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<folder archiveVersion="22.0" xmlns="http://labkey.org/folder/xml">
3+
<study dir="study"/>
4+
</folder>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
This folder contains the reference study for IDR data. It should be generated by performing
2+
a folder export from the production server, then copying the datasets_manifest.xml, datasets_metadata.xml,
3+
PrimateElectronicHealthRecord.dataset and study.xml files. After copying, the following can be used to find/replace
4+
metadata in datasets_metadata.xml to remove unwanted information:
5+
6+
Replace the following regex expressions with empty string:
7+
8+
( )*<inputType>(.*)</inputType>\n
9+
( )*<isHidden>(.*)</isHidden>\n|( )*<shownIn(.*)View>(.*)</shownIn(.*)View>\n
10+
( )*<url>(.*)</url>\n|( )*<description>(.*)</description>\n|( )*<facetingBehavior>(.*)</facetingBehavior>\n|( )*<nullable>(.*)</nullable>\n
11+
( )*<formatString>(.*)</formatString>\n|( )*<columnTitle>(.*)</columnTitle>\n|( )*<fk>(.)*\n( )*<fk(.)*\n( )*<fk(.)*\n( )*<fk(.)*\n( )*</fk>(.)*\n
12+
( )*<dimension>(.*)</dimension>\n|( )*<measure>(.*)</measure>\n|( )*<isMvEnabled>(.*)</isMvEnabled>\n
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# default group can be used to avoid repeating definitions for each dataset
2+
#
3+
# action=[REPLACE,APPEND,DELETE] (default:REPLACE)
4+
# deleteAfterImport=[TRUE|FALSE] (default:FALSE)
5+
6+
default.action=REPLACE
7+
default.deleteAfterImport=FALSE
8+
9+
# map a source tsv column (right side) to a property name or full propertyURI (left)
10+
# predefined properties: ParticipantId, SiteId, VisitId, Created
11+
default.property.ParticipantId=ptid
12+
default.property.Created=dfcreate
13+
14+
# use to map from filename->datasetid
15+
# NOTE: if there are NO explicit import definitions, we will try to import all files matching pattern
16+
# NOTE: if there are ANY explicit mapping, we will only import listed datasets
17+
18+
default.filePattern=dataset(\\d*).tsv
19+
default.importAllMatches=TRUE

0 commit comments

Comments
 (0)