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: 6 additions & 0 deletions Studies/api-src/org/labkey/api/studies/StudiesService.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@
import org.labkey.api.module.Module;
import org.labkey.api.resource.Resource;
import org.labkey.api.security.User;
import org.labkey.api.studies.study.EventProvider;
import org.labkey.api.util.Path;

import java.io.IOException;
import java.util.List;

/**
* Created by bimber on 11/3/2016.
Expand All @@ -28,4 +30,8 @@ static public void setInstance(StudiesService instance)
abstract public void importFolderDefinition(Container container, User user, Module m, Path sourceFolderDirPath) throws IOException;

abstract public void loadTsv(Resource tsv, String schemaName, User u, Container c);

abstract public void registerEventProvider(EventProvider ep);

abstract public List<EventProvider> getEventProviders(Container c);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
package org.labkey.api.studies.study;

import org.jetbrains.annotations.Nullable;
import org.labkey.api.data.Container;
import org.labkey.api.data.TableInfo;
import org.labkey.api.module.Module;
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 java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public abstract class AbstractEventProvider implements EventProvider
{
private final String _name;
private final String _label;
private final String _description;
private final Module _owner;

public AbstractEventProvider(String name, String label, String description, Module owner)
{
_name = name;
_label = label;
_description = description;
_owner = owner;
}

@Override
public String getDescription()
{
return _description;
}

@Override
public String getLabel()
{
return _label;
}

@Override
public String getName()
{
return _name;
}

@Override
public boolean isAvailable(Container c)
{
return c.getActiveModules().contains(_owner);
}

@Override
public final Map<String, Date> inferDates(Collection<String> subjectList, Container c, User u)
{
Map<String, Date> result = new HashMap<>(inferDatesRaw(subjectList, c, u));
subjectList.forEach(x -> {
if (!result.containsKey(x))
{
result.put(x, null);
}
});

return result;
}

abstract protected Map<String, Date> inferDatesRaw(Collection<String> subjectList, Container c, User u);

protected @Nullable TableInfo getTable(Container c, User u, String schema, String table)
{
UserSchema us = QueryService.get().getUserSchema(u, c, schema);
if (us == null)
{
return null;
}

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

return ti;
}
}
26 changes: 26 additions & 0 deletions Studies/api-src/org/labkey/api/studies/study/EventProvider.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package org.labkey.api.studies.study;

import org.labkey.api.data.Container;
import org.labkey.api.security.User;

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

/**
* Each study will have a handful of important dates, which are used to define relative dates for each subject/participant.
* The EventProvider classes provide a code-based way to establish the handful of critical dates. This code is executed to populate
* the KeyEvents table, which maps subject/event to date.
*/
public interface EventProvider
{
boolean isAvailable(Container c);

String getName();

String getLabel();

String getDescription();

Map<String, Date> inferDates(Collection<String> subjectList, Container c, User u);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
CREATE TABLE studies.studies (
rowid serial,
studyName varchar(1000),
label varchar(1000),
category varchar(1000),
description varchar(4000),

lsid entityid,
container entityid,
created timestamp,
createdby int,
modified timestamp,
modifiedby int,

CONSTRAINT PK_studies PRIMARY KEY (rowid)
);

CREATE TABLE studies.studyCohorts (
rowid serial,
studyId int,
cohortName varchar(4000),
label varchar(4000),
category varchar(4000),
description varchar(4000),
isControlGroup bool default false,
sortOrder int,

lsid entityid,
container entityid,
created timestamp,
createdby int,
modified timestamp,
modifiedby int,

CONSTRAINT PK_studyCohorts PRIMARY KEY (rowid)
);

CREATE TABLE studies.anchorEvents (
rowid serial,
studyId int,
label varchar(4000),
description varchar(4000),
eventProviderName varchar(1000),

container entityid,
created timestamp,
createdby int,
modified timestamp,
modifiedby int,

CONSTRAINT PK_anchorEvents PRIMARY KEY (rowid)
);

CREATE TABLE studies.expectedTimepoints (
rowid serial,
studyId int,
cohortId int,
label varchar(4000),
labelShort varchar(100),
description varchar(4000),
numericLabel int,
anchorEvent int,
rangeMin int,
rangeMax int,

container entityid,
created timestamp,
createdby int,
modified timestamp,
modifiedby int,

CONSTRAINT PK_expectedTimepoints PRIMARY KEY (rowid)
);

CREATE TABLE studies.timepointToDate (
rowid serial,
subjectId varchar(4000),
timepointId int,
dateMin timestamp,
dateMax timestamp,
isManualOverride bool default false,

container entityid,
created timestamp,
createdby int,
modified timestamp,
modifiedby int,

CONSTRAINT PK_timepointToDate PRIMARY KEY (rowid)
);
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
CREATE TABLE studies.studies (
rowid int identity(1,1),
studyName varchar(1000),
label varchar(1000),
category varchar(1000),
description varchar(4000),

lsid entityid,
container entityid,
created datetime,
createdby int,
modified datetime,
modifiedby int,

CONSTRAINT PK_studies PRIMARY KEY (rowid)
);

CREATE TABLE studies.studyCohorts (
rowid int identity(1,1),
studyId int,
cohortName varchar(4000),
label varchar(4000),
category varchar(4000),
description varchar(4000),
isControlGroup bit default 0,
sortOrder int,

lsid entityid,
container entityid,
created datetime,
createdby int,
modified datetime,
modifiedby int,

CONSTRAINT PK_studyCohorts PRIMARY KEY (rowid)
);

CREATE TABLE studies.anchorEvents (
rowid int identity(1,1),
studyId int,
label varchar(4000),
description varchar(4000),
eventProviderName varchar(1000),

container entityid,
created datetime,
createdby int,
modified datetime,
modifiedby int,

CONSTRAINT PK_anchorEvents PRIMARY KEY (rowid)
);

CREATE TABLE studies.expectedTimepoints (
rowid int identity(1,1),
studyId int,
cohortId int,
label varchar(4000),
labelShort varchar(100),
description varchar(4000),
numericLabel int,
anchorEvent int,
rangeMin int,
rangeMax int,

container entityid,
created datetime,
createdby int,
modified datetime,
modifiedby int,

CONSTRAINT PK_expectedTimepoints PRIMARY KEY (rowid)
);

CREATE TABLE studies.timepointToDate (
rowid int identity(1,1),
subjectId varchar(4000),
timepointId int,
dateMin datetime,
dateMax datetime,
isManualOverride bit default 0,

container entityid,
created datetime,
createdby int,
modified datetime,
modifiedby int,

CONSTRAINT PK_timepointToDate PRIMARY KEY (rowid)
);
Loading