Skip to content

Commit e3641dd

Browse files
labkey-jeckelslabkey-tchad
authored andcommitted
Item 6167: integrate ITN changes into core codebase (#66)
* Conditional and integrate ITN specimen request and reporting changes * New TrialShareExportAction
1 parent da40e0d commit e3641dd

7 files changed

Lines changed: 1039 additions & 2 deletions

File tree

module.properties

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
ModuleClass: org.labkey.trialshare.TrialShareModule
22
Label: Data Finder for ITN
33
Description: Provides a web part for exploring the studies and manuscripts available within ITN.
4-
URL: http://example.com/FIXME
4+
URL: https://www.itntrialshare.org
55
License: Apache 2.0
66
LicenseURL: http://www.apache.org/licenses/LICENSE-2.0
7+
ModuleDependencies: Study
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package org.labkey.trialshare;
2+
3+
import org.labkey.api.data.Container;
4+
import org.labkey.api.security.User;
5+
import org.labkey.api.settings.AdminConsole;
6+
import org.labkey.api.settings.ExperimentalFeatureService;
7+
import org.labkey.api.study.SpecimenService;
8+
import org.labkey.api.util.HtmlString;
9+
10+
/** Decides whether to supply the default behavior or an ITN-specific one based on an experimental feature flag */
11+
public class DelegatingSpecimenRequestCustomizer implements SpecimenService.SpecimenRequestCustomizer
12+
{
13+
private final SpecimenService.SpecimenRequestCustomizer _default;
14+
private final SpecimenService.SpecimenRequestCustomizer _itn = new ITNSpecimenRequestCustomizer();
15+
private SpecimenService.SpecimenRequestCustomizer _active;
16+
17+
private static final String ITN_SPECIMEN_HANDLING_FEATURE_NAME = "ITNSpecimenHandling";
18+
19+
public DelegatingSpecimenRequestCustomizer(SpecimenService.SpecimenRequestCustomizer defaultCustomizer)
20+
{
21+
_default = defaultCustomizer;
22+
23+
_active = ExperimentalFeatureService.get().isFeatureEnabled(ITN_SPECIMEN_HANDLING_FEATURE_NAME) ? _itn : _default;
24+
25+
AdminConsole.addExperimentalFeatureFlag(ITN_SPECIMEN_HANDLING_FEATURE_NAME, "ITN specimen behavior",
26+
"This feature allows empty specimen requests, adds ITN-specific messages, hides some reporting options, and other tweaks", false);
27+
28+
ExperimentalFeatureService.get().addFeatureListener(ITN_SPECIMEN_HANDLING_FEATURE_NAME, (feature, enabled) -> _active = enabled ? _itn : _default);
29+
}
30+
31+
@Override
32+
public boolean allowEmptyRequests()
33+
{
34+
return _active.allowEmptyRequests();
35+
}
36+
37+
@Override
38+
public Integer getDefaultDestinationSiteId()
39+
{
40+
return _active.getDefaultDestinationSiteId();
41+
}
42+
43+
@Override
44+
public boolean omitTypeGroupingsWhenReporting()
45+
{
46+
return _active.omitTypeGroupingsWhenReporting();
47+
}
48+
49+
@Override
50+
public boolean canChangeStatus(User user)
51+
{
52+
return _active.canChangeStatus(user);
53+
}
54+
55+
@Override
56+
public boolean hideRequestWarnings()
57+
{
58+
return _active.hideRequestWarnings();
59+
}
60+
61+
@Override
62+
public HtmlString getSubmittedMessage(Container c, int requestId)
63+
{
64+
return _active.getSubmittedMessage(c, requestId);
65+
}
66+
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package org.labkey.trialshare;
2+
3+
import org.apache.log4j.Logger;
4+
import org.labkey.api.data.Container;
5+
import org.labkey.api.data.ContainerManager;
6+
import org.labkey.api.security.Group;
7+
import org.labkey.api.security.GroupManager;
8+
import org.labkey.api.security.User;
9+
import org.labkey.api.study.SamplesUrls;
10+
import org.labkey.api.study.SpecimenService;
11+
import org.labkey.api.util.HtmlString;
12+
import org.labkey.api.util.PageFlowUtil;
13+
import org.labkey.security.xml.GroupEnumType;
14+
15+
import static org.labkey.api.util.PageFlowUtil.link;
16+
17+
public class ITNSpecimenRequestCustomizer implements SpecimenService.SpecimenRequestCustomizer
18+
{
19+
private static final Logger LOG = Logger.getLogger(ITNSpecimenRequestCustomizer.class);
20+
21+
@Override
22+
public boolean allowEmptyRequests()
23+
{
24+
return true;
25+
}
26+
27+
@Override
28+
public Integer getDefaultDestinationSiteId()
29+
{
30+
return 9999999;
31+
}
32+
33+
@Override
34+
public boolean omitTypeGroupingsWhenReporting()
35+
{
36+
return true;
37+
}
38+
39+
@Override
40+
public boolean canChangeStatus(User user)
41+
{
42+
Group specimenRequestAdmins = GroupManager.getGroup(ContainerManager.getRoot(), "Specimen Request Administrators", GroupEnumType.SITE);
43+
if (specimenRequestAdmins != null)
44+
{
45+
return user.isInSiteAdminGroup() || user.isInGroup(specimenRequestAdmins.getUserId());
46+
}
47+
LOG.error("Unable to find site group \"Specimen Request Administrators\", allowing user to update specimen request status");
48+
return true;
49+
}
50+
51+
@Override
52+
public HtmlString getSubmittedMessage(Container c, int requestId)
53+
{
54+
SamplesUrls samplesUrls = PageFlowUtil.urlProvider(SamplesUrls.class);
55+
return HtmlString.unsafe("Thank you for your request. A representative from the ITN will be in touch " +
56+
"with you. You can also contact us at " +
57+
link("trialsharesupport@immunetolerance.org").href("mailto:trialsharesupport@immunetolerance.org?Body=" + PageFlowUtil.filter(samplesUrls.getRequestDetailsURL(c, requestId).getURIString())).clearClasses() +
58+
" to follow up with us regarding this request.<br/>" +
59+
"You may also update this request at any calendar to add comments or supporting " +
60+
"documents by clicking here " + link("Update Request").href(samplesUrls.getManageRequestStatusURL(c, requestId)));
61+
}
62+
63+
@Override
64+
public boolean hideRequestWarnings()
65+
{
66+
return true;
67+
}
68+
}

0 commit comments

Comments
 (0)