From 8976672382942a1fec01d07d8133358642b7efd4 Mon Sep 17 00:00:00 2001 From: Steven Esser Date: Fri, 19 Apr 2019 10:59:22 -0700 Subject: [PATCH] Add pURL support for Conclusions * Add purl field to Conclusions model * Add Package URL column to Conclusions DataTable * Automatically populate purl values for concluded packages Addresses: #337 Signed-off-by: Steven Esser --- assets/app/js/controllers/conclusionDataTable.js | 6 ++++++ assets/app/js/controllers/conclusionDialog.js | 15 +++++++++++++++ assets/app/js/models/conclusion.js | 3 ++- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/assets/app/js/controllers/conclusionDataTable.js b/assets/app/js/controllers/conclusionDataTable.js index d95e189d..cc337a9b 100644 --- a/assets/app/js/controllers/conclusionDataTable.js +++ b/assets/app/js/controllers/conclusionDataTable.js @@ -186,6 +186,12 @@ class ConclusionDataTable extends Controller { 'name': 'notice_url', 'render': Utils.anchorTag }, + { + 'data': 'purl', + 'title': 'Package URL', + 'name': 'purl', + 'render': Utils.anchorTag + }, { data: 'feature', title: 'Feature', diff --git a/assets/app/js/controllers/conclusionDialog.js b/assets/app/js/controllers/conclusionDialog.js index 9116991e..556aa51d 100644 --- a/assets/app/js/controllers/conclusionDialog.js +++ b/assets/app/js/controllers/conclusionDialog.js @@ -44,6 +44,7 @@ class ConclusionDialog extends Controller { this.downloadUrl = this.dialog.find('#conclusion-download-url'); this.licenseUrl = this.dialog.find('#conclusion-license-url'); this.noticeUrl = this.dialog.find('#conclusion-notice-url'); + this.packageUrl = null; this.saveButton = this.dialog.find('button#conclusion-save'); this.deleteButton = this.dialog.find('button#conclusion-delete'); @@ -117,6 +118,7 @@ class ConclusionDialog extends Controller { download_url: (this.downloadUrl.val() || [null])[0], license_url: (this.licenseUrl.val() || [null])[0], notice_url: (this.noticeUrl.val() || [null])[0], + purl: this.packageUrl, programming_language: (this.language.val() || [null])[0], notes: this.notes.val() }; @@ -161,6 +163,7 @@ class ConclusionDialog extends Controller { this._setupDownloadUrl(conclusion), this._setupLicenseUrl(conclusion), this._setupNoticeUrl(conclusion), + this._setupPackageUrl(conclusion), this._setupNotes(conclusion) ]); }) @@ -343,6 +346,18 @@ class ConclusionDialog extends Controller { }); } + _setupPackageUrl(conclusion) { + return this.db().sync + .then((db) => db.File.findOne({where: {path: conclusion.path}})) + .then((file) => this.db().sync + .then((db) => db.Package.findOne({where: {fileId: file.id}})) + .then((pkg) => { + if (pkg) { + this.packageUrl = pkg.purl; + } + })); + } + _setupModified(conclusion) { if (conclusion.is_modified !== null && conclusion.is_modified !== undefined) { const modifiedValue = conclusion.is_modified ? 'yes' : 'no'; diff --git a/assets/app/js/models/conclusion.js b/assets/app/js/models/conclusion.js index 761f67ed..26df3d59 100644 --- a/assets/app/js/models/conclusion.js +++ b/assets/app/js/models/conclusion.js @@ -37,7 +37,8 @@ module.exports = function(sequelize, DataTypes) { license_url: DataTypes.STRING, notice_url: DataTypes.STRING, programming_language: DataTypes.STRING, - notes: DataTypes.STRING + notes: DataTypes.STRING, + purl: DataTypes.STRING }, { getterMethods: {