Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion SivStudies/src/org/labkey/sivstudies/SivStudiesModule.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@
import org.labkey.api.data.Container;
import org.labkey.api.ldk.ExtendedSimpleModule;
import org.labkey.api.module.ModuleContext;
import org.labkey.api.studies.StudiesService;
import org.labkey.sivstudies.study.ArtInitiationEventProvider;
import org.labkey.sivstudies.study.SivInfectionEventProvider;

import java.util.Collection;
import java.util.Collections;
Expand Down Expand Up @@ -51,7 +54,8 @@ protected void init()
@Override
public void doStartupAfterSpringConfig(ModuleContext moduleContext)
{

StudiesService.get().registerEventProvider(new SivInfectionEventProvider());
StudiesService.get().registerEventProvider(new ArtInitiationEventProvider());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package org.labkey.sivstudies.study;

import org.labkey.api.data.CompareType;
import org.labkey.api.data.Container;
import org.labkey.api.data.SimpleFilter;
import org.labkey.api.data.TableInfo;
import org.labkey.api.data.TableSelector;
import org.labkey.api.module.ModuleLoader;
import org.labkey.api.query.FieldKey;
import org.labkey.api.security.User;
import org.labkey.api.studies.study.AbstractEventProvider;
import org.labkey.api.study.DatasetTable;
import org.labkey.api.util.PageFlowUtil;
import org.labkey.sivstudies.SivStudiesModule;

import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class ArtInitiationEventProvider extends AbstractEventProvider
{
public ArtInitiationEventProvider()
{
super("ART_Initiation", "ART Initiation", "This is the first date when the subject was assigned to the study, as defined in the study assignment table", ModuleLoader.getInstance().getModule(SivStudiesModule.class));
}

@Override
protected Map<String, Date> inferDatesRaw(Collection<String> subjectList, Container c, User u)
{
TableInfo ti = getTable(c, u, "study", "treatments");
if (ti == null)
{
return null;
}

if (ti instanceof DatasetTable ds)
{
Map<String, Date> ret = new HashMap<>();
final String subjectCol = ds.getDataset().getStudy().getSubjectColumnName();
new TableSelector(ti, PageFlowUtil.set(subjectCol, "date"), new SimpleFilter(FieldKey.fromString(subjectCol), subjectList, CompareType.IN), null).forEachResults(rs -> {
String subjectId = rs.getString(FieldKey.fromString(subjectCol));
Date date = rs.getDate(FieldKey.fromString("date"));

if (!ret.containsKey(subjectId) || date.before(ret.get(subjectId)))
{
ret.put(subjectId, date);
}
});

return ret;
}
else
{
throw new IllegalStateException("Expected study.assignment to be a DatasetTable");
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package org.labkey.sivstudies.study;

import org.labkey.api.data.CompareType;
import org.labkey.api.data.Container;
import org.labkey.api.data.SimpleFilter;
import org.labkey.api.data.TableInfo;
import org.labkey.api.data.TableSelector;
import org.labkey.api.module.ModuleLoader;
import org.labkey.api.query.FieldKey;
import org.labkey.api.query.QueryService;
import org.labkey.api.query.UserSchema;
import org.labkey.api.security.User;
import org.labkey.api.security.permissions.ReadPermission;
import org.labkey.api.studies.study.AbstractEventProvider;
import org.labkey.api.study.DatasetTable;
import org.labkey.api.util.PageFlowUtil;
import org.labkey.sivstudies.SivStudiesModule;

import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class SivInfectionEventProvider extends AbstractEventProvider
{
public SivInfectionEventProvider()
{
super("SIV_Infection", "SIV Infection", "This is the official date of SIV infection, used to calculate days-post-infection", ModuleLoader.getInstance().getModule(SivStudiesModule.class));
}

@Override
protected Map<String, Date> inferDatesRaw(Collection<String> subjectList, Container c, User u)
{
UserSchema us = QueryService.get().getUserSchema(u, c, "study");
if (us == null)
{
return Collections.emptyMap();
}

TableInfo ti = us.getTable("assignment");
if (ti == null || !ti.hasPermission(u, ReadPermission.class))
{
return Collections.emptyMap();
}

if (ti instanceof DatasetTable ds)
{
Map<String, Date> ret = new HashMap<>();
final String subjectCol = ds.getDataset().getStudy().getSubjectColumnName();
new TableSelector(ti, PageFlowUtil.set(subjectCol, "date"), new SimpleFilter(FieldKey.fromString(subjectCol), subjectList, CompareType.IN), null).forEachResults(rs -> {
ret.put(rs.getString(FieldKey.fromString(subjectCol)), rs.getDate(FieldKey.fromString("date")));
});

return ret;
}
else
{
throw new IllegalStateException("Expected study.assignment to be a DatasetTable");
}
}
}