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 resources/queries/cds/learn_publicationExternalLinks.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
SELECT
elm.protocol_id,
el.*
FROM cds.external_link el
LEFT JOIN cds.external_link_map elm ON el.cds_link_id = elm.cds_link_id
WHERE elm.type = 'publication'
1 change: 1 addition & 0 deletions resources/queries/cds/learn_publicationdata.sql
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
*/
SELECT
pd.publication_id,
pd.display_order,
doc.*
FROM cds.publicationDocument pd
LEFT JOIN document doc ON pd.document_id = doc.document_id
6 changes: 6 additions & 0 deletions resources/queries/cds/learn_studyExternalLinks.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
SELECT
elm.protocol_id,
el.*
FROM cds.external_link el
LEFT JOIN cds.external_link_map elm ON el.cds_link_id = elm.cds_link_id
WHERE elm.type = 'study'
21 changes: 21 additions & 0 deletions resources/schemas/cds.xml
Original file line number Diff line number Diff line change
Expand Up @@ -729,6 +729,7 @@
<column columnName="publication_id"/>
<column columnName="document_id"/>
<column columnName="container"/>
<column columnName="display_order"/>
</columns>
</table>
<table tableName="document" tableDbType="TABLE">
Expand Down Expand Up @@ -1423,6 +1424,7 @@
<column columnName="publication_id"/>
<column columnName="document_id"/>
<column columnName="container"/>
<column columnName="display_order"/>
</columns>
</table>
<table tableName="import_studyReport" tableDbType="TABLE">
Expand Down Expand Up @@ -2267,4 +2269,23 @@
<column columnName="container"/>
</columns>
</table>
<table tableName="external_link" tableDbType="TABLE">
<columns>
<column columnName="cds_link_id"/>
<column columnName="link_label"/>
<column columnName="link_url"/>
<column columnName="link_type"/>
<column columnName="link_description"/>
<column columnName="container"/>
</columns>
</table>
<table tableName="external_link_map" tableDbType="TABLE">
<columns>
<column columnName="row_id"/>
<column columnName="cds_link_id"/>
<column columnName="protocol_id"/>
<column columnName="type"/>
<column columnName="container"/>
</columns>
</table>
</tables>
29 changes: 29 additions & 0 deletions resources/schemas/dbscripts/postgresql/cds-24.002-24.003.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
ALTER TABLE cds.import_PublicationDocument ADD COLUMN display_order INT;
ALTER TABLE cds.PublicationDocument ADD COLUMN display_order INT;

CREATE TABLE cds.external_link
(
cds_link_id VARCHAR(250) NOT NULL,
link_label VARCHAR(250) NOT NULL,
link_url VARCHAR(250) NOT NULL,
link_type VARCHAR(100),
link_description VARCHAR(250),
container ENTITYID NOT NULL,

CONSTRAINT PK_external_links PRIMARY KEY (cds_link_id, container)
);

CREATE TABLE cds.external_link_map
(
row_id SERIAL,
cds_link_id VARCHAR(250) NOT NULL,
protocol_id VARCHAR(250) NOT NULL,
type VARCHAR(100) NOT NULL,
container ENTITYID NOT NULL,

CONSTRAINT PK_external_link_map PRIMARY KEY (row_id),
CONSTRAINT UQ_external_link_map UNIQUE (cds_link_id, protocol_id, type, container),
CONSTRAINT FK_external_link_map_cds_link_id FOREIGN KEY (cds_link_id, container) REFERENCES cds.external_link (cds_link_id, container)
);
CREATE INDEX IX_external_link_map_cds_link_id ON cds.external_link_map(cds_link_id);

5 changes: 4 additions & 1 deletion src/org/labkey/cds/CDSManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,10 @@ public void cleanContainer(Container c)
"alignment_run",
"allele_sequence",
"antibody_class",
"header_source"
"header_source",

"external_link_map",
"external_link"
})
{
TableInfo t = dbSchema.getTable(s);
Expand Down
2 changes: 1 addition & 1 deletion src/org/labkey/cds/CDSModule.java
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ public String getName()
@Override
public @Nullable Double getSchemaVersion()
{
return 24.002;
return 24.003;
}

@Override
Expand Down
4 changes: 4 additions & 0 deletions src/org/labkey/cds/data/steps/CDSImportTask.java
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,10 @@ public class CDSImportTask extends ImportTask
new CDSImportCopyConfig("import_Virus_Metadata_All", "Virus_Metadata_All"),
new CDSImportCopyConfig("import_Virus_Lab_Id", "Virus_Lab_Id"),
new CDSImportCopyConfig("import_Virus_Synonym", "Virus_Synonym"),

// External repository links
new CDSImportCopyConfig("external_link"),
new CDSImportCopyConfig("external_link_map")
};

@Override
Expand Down
1 change: 1 addition & 0 deletions src/org/labkey/cds/view/template/ConnectorTemplate.jsp
Original file line number Diff line number Diff line change
Expand Up @@ -356,6 +356,7 @@
srcPath + "/app/view/module/StudyResources.js",
srcPath + "/app/view/module/MabDetails.js",
srcPath + "/app/view/module/PublicationDetails.js",
srcPath + "/app/view/module/PublicationResources.js",
srcPath + "/app/view/module/ProductHeader.js",
srcPath + "/app/view/module/ProductOtherProducts.js",
srcPath + "/app/view/module/StudyHeader.js",
Expand Down
8 changes: 4 additions & 4 deletions test/sampledata/dataspace/cdsimport/PublicationDocument.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
publication_id document_id
80 301
136 300
80 302
publication_id document_id display_order
80 301 2
136 300
80 302 1
4 changes: 4 additions & 0 deletions test/sampledata/dataspace/cdsimport/external_link.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
cds_link_id link_label link_url link_type link_description
cds_link_001 Vivli Data Repository http://vivli.com/data/CAVD725
cds_link_002 Test Data Repository http://vivli.com/data/TEST test link not a real URL
cds_link_003 GitHub https://github.com/labkey
7 changes: 7 additions & 0 deletions test/sampledata/dataspace/cdsimport/external_link_map.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
cds_link_id protocol_id type
cds_link_001 q2 study
cds_link_002 q2 study
cds_link_003 z117 study
cds_link_001 136 publication
cds_link_002 136 publication
cds_link_003 80 publication
7 changes: 6 additions & 1 deletion webapp/Connector/cube.js
Original file line number Diff line number Diff line change
Expand Up @@ -815,7 +815,12 @@ Ext4.define('Connector.cube.Configuration', {
type: 'publicationnonintegrateddata',
staticData: {
title: 'Publication data',
instructions: 'Download files'
instructions: 'Download individual files'
}
},{
type: 'publicationresources',
staticData: {
title: 'Other publication resources'
}
},{
type: 'interactivereports',
Expand Down
1 change: 1 addition & 0 deletions webapp/Connector/extapp.lib.xml
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,7 @@
<script path="Connector/src/app/view/module/StudyResources.js"/>
<script path="Connector/src/app/view/module/MabDetails.js"/>
<script path="Connector/src/app/view/module/PublicationDetails.js"/>
<script path="Connector/src/app/view/module/PublicationResources.js"/>
<script path="Connector/src/app/view/module/ProductHeader.js"/>
<script path="Connector/src/app/view/module/ProductOtherProducts.js"/>
<script path="Connector/src/app/view/module/StudyHeader.js"/>
Expand Down
3 changes: 2 additions & 1 deletion webapp/Connector/src/app/model/Publication.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ Ext.define('Connector.app.model.Publication', {
{name: 'studies', convert : Connector.model.Filter.asArray},
{name: 'interactive_reports', convert : Connector.model.Filter.asArray},
{name: 'curated_groups', convert : Connector.model.Filter.asArray},
{name: 'data_types_available', convert : Connector.model.Filter.asArray}
{name: 'data_types_available', convert : Connector.model.Filter.asArray},
{name: 'external_links', convert : Connector.model.Filter.asArray}
]
});
3 changes: 2 additions & 1 deletion webapp/Connector/src/app/model/StudyOverview.js
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,7 @@ Ext.define('Connector.app.model.StudyOverview', {
{name: 'interactive_reports', convert : Connector.model.Filter.asArray},
{name: 'curated_groups', convert : Connector.model.Filter.asArray},
{name: 'data_types_available', convert : Connector.model.Filter.asArray},
{name: 'data_available'}
{name: 'data_available'},
{name: 'external_links', convert : Connector.model.Filter.asArray}
]
});
33 changes: 33 additions & 0 deletions webapp/Connector/src/app/store/Publication.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ Ext.define('Connector.app.store.Publication', {
this.publicationDocuments = undefined;
this.publicationReportsData = undefined;
this.publicationCuratedGroupData = undefined;
this.external_links = undefined;

this.loadAccessibleStudies(this._onLoadComplete, this); // populate this.accessibleStudies

Expand Down Expand Up @@ -71,6 +72,13 @@ Ext.define('Connector.app.store.Publication', {
success: this.onLoadPublicationCuratedGroup,
scope: this
});

LABKEY.Query.selectRows({
schemaName: 'cds',
queryName: 'learn_publicationExternalLinks',
success: this.onLoadExternalLinks,
scope: this
});
},

onLoadPublications: function (data) {
Expand Down Expand Up @@ -103,6 +111,11 @@ Ext.define('Connector.app.store.Publication', {
this._onLoadComplete();
},

onLoadExternalLinks : function(externalLinks) {
this.external_links = externalLinks.rows;
this._onLoadComplete();
},

_onLoadComplete : function() {
if (Ext.isDefined(this.publicationData)
&& Ext.isDefined(this.studyData)
Expand All @@ -111,6 +124,7 @@ Ext.define('Connector.app.store.Publication', {
&& Ext.isDefined(this.publicationDocuments)
&& Ext.isDefined(this.publicationReportsData)
&& Ext.isDefined(this.publicationCuratedGroupData)
&& Ext.isDefined(this.external_links)
&& this.isLoadComplete()) {

this.publicationData.sort(function(row1, row2) {
Expand Down Expand Up @@ -170,6 +184,7 @@ Ext.define('Connector.app.store.Publication', {
}, this).map(function(doc) {
return {
publication_id: doc.publication_id,
display_order : doc.display_order || 0,
document_id: doc.document_id,
label: doc.label,
fileName: doc.filename,
Expand All @@ -191,6 +206,20 @@ Ext.define('Connector.app.store.Publication', {
publicationMap[doc.publication_id].push(doc);
}, this);

// sort the publication docs according to display order (ascending)
Ext.Object.each(publicationMap, function(key, publications){
publications.sort(function(a, b){
return a.display_order - b.display_order;
});
});

// map any external links to each publication
var externalLinkMap = {};
Ext.each(this.external_links, function (link) {
externalLinkMap[link.protocol_id] = externalLinkMap[link.protocol_id] || [];
externalLinkMap[link.protocol_id].push(link);
}, this);

var savedReports = [];
for (var i=0; i < this.publicationReportsData.length; i++) {
var id = this.publicationReportsData[i].cds_report_id.toString();
Expand Down Expand Up @@ -243,6 +272,9 @@ Ext.define('Connector.app.store.Publication', {
publication.publication_data_count = publication.publication_data.length;
publication.data_availability = publication.publication_data.length > 0;

// external links
publication.external_links = externalLinkMap[publication.publication_id] || [];

//saved reports
var savedRep = savedReports.filter(function (value) {
return value.publication_id.toString() === publication.publication_id;
Expand Down Expand Up @@ -271,6 +303,7 @@ Ext.define('Connector.app.store.Publication', {
this.publicationReportsData = undefined;
this.savedReportsData = [];
this.publicationCuratedGroupData = undefined;
this.external_links = [];

this.loadRawData(publications);
this.fireEvent('dataloaded');
Expand Down
26 changes: 22 additions & 4 deletions webapp/Connector/src/app/store/StudyOverview.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,16 @@ Ext.define('Connector.app.store.StudyOverview', {
this.assayIdentifiers = undefined;
this.studyReportsData = undefined;
this.studyCuratedGroupData = undefined;
this.external_links = undefined;

this.loadAccessibleStudies(this._onLoadComplete, this); // populate this.accessibleStudies

LABKEY.Query.selectRows({
schemaName: 'cds.metadata',
queryName: 'study',
filterArray: [
LABKEY.Filter.create('study_name', id, LABKEY.Filter.Types.EQUALS)
],
success: this.onLoadStudies,
scope: this
});
Expand Down Expand Up @@ -135,6 +139,15 @@ Ext.define('Connector.app.store.StudyOverview', {
success: this.onNILoadDocuments,
scope: this
});
LABKEY.Query.selectRows({
schemaName: 'cds',
queryName: 'learn_studyExternalLinks',
filterArray: [
LABKEY.Filter.create('protocol_id', id, LABKEY.Filter.Types.EQUALS)
],
success: this.onLoadStudyExternalLinks,
scope: this
});
},

onLoadStudies : function(studyData) {
Expand Down Expand Up @@ -199,6 +212,11 @@ Ext.define('Connector.app.store.StudyOverview', {
this._onLoadComplete();
},

onLoadStudyExternalLinks : function(externalLinks) {
this.external_links = externalLinks.rows;
this._onLoadComplete();
},

_onLoadComplete: function () {
if (Ext.isDefined(this.studyData)
&& Ext.isDefined(this.productData)
Expand All @@ -213,6 +231,7 @@ Ext.define('Connector.app.store.StudyOverview', {
&& Ext.isDefined(this.assayIdentifiers)
&& Ext.isDefined(this.studyReportsData)
&& Ext.isDefined(this.studyCuratedGroupData)
&& Ext.isDefined(this.external_links)
&& this.isLoadComplete()) {
var studies = [], products, productNames, productClasses;
var relationshipOrderList = this.relationshipOrderData.map(function(relOrder) {
Expand Down Expand Up @@ -544,13 +563,11 @@ Ext.define('Connector.app.store.StudyOverview', {
study.data_types_available = this.getDataTypesAvailable(study);
study.data_available = (study.assays_added_count > 0 || study.ni_assays_added_count > 0 || study.pub_available_data_count > 0) ? 'Data added' : 'Data not added';

// additional data repositories
study.external_links = this.external_links;
studies.push(study);
}, this);

studies.sort(function(studyA, studyB) {
return Connector.model.Filter.sorters.natural(studyA.label, studyB.label);
});

this.studyData = undefined;
this.assayData = undefined;
this.productData = undefined;
Expand All @@ -563,6 +580,7 @@ Ext.define('Connector.app.store.StudyOverview', {
this.studyReportsData = undefined;
this.savedReportsData = [];
this.studyCuratedGroupData = undefined;
this.external_links = [];

this.loadRawData(studies);
this.dataLoaded = true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -303,15 +303,18 @@ Ext.define('Connector.view.module.PublicationNonIntegratedData', {
return new Ext4.XTemplate(
'<tpl>',
'<table>',
'<tr>',
'<td class="non-integrated-data">',
'<tpl if="isLinkValid">',
'<tpl if="isLinkValid">',
'<tr>',
'<td>',
'<img class="detail-has-data-small" src="' + Connector.resourceContext.path + '/images/learn/smallCheck.png"/>',
'</td>',
'<td class="non-integrated-data">',
'<span>{label:htmlEncode}</span>',
'&nbsp;{suffix}&nbsp;',
'<a href="{filePath}" target="_blank"><img alt="{label}" src="' + LABKEY.contextPath + '/Connector/images/download-icon.svg' + '" height="13" width="13" align="right"/></a>',
'</tpl>',
'</td>',
'</tr>',
'</td>',
'</tr>',
'</tpl>',
'</table>',
'</tpl>');
}
Expand Down
Loading
Loading