Skip to content

Commit

Permalink
Add Default Min PSMs at Project Level
Browse files Browse the repository at this point in the history
  • Loading branch information
danjasuw committed Jun 25, 2019
1 parent a3983cb commit ed3bcff
Show file tree
Hide file tree
Showing 35 changed files with 950 additions and 180 deletions.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@

-- 2019_06_Update_2__add__project_level_default_fltr_min_psms.txt

CREATE TABLE IF NOT EXISTS project_level_default_fltr_min_psms_tbl (
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
project_id INT(10) UNSIGNED NOT NULL,
min_psms INT NOT NULL,
created_auth_user_id INT UNSIGNED NOT NULL,
created_date_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
last_updated_auth_user_id INT NOT NULL,
last_updated_date_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
CONSTRAINT project_level_default_fltr_min_psms_tbl
FOREIGN KEY (project_id)
REFERENCES project (id)
ON DELETE CASCADE
ON UPDATE NO ACTION)
ENGINE = InnoDB
COMMENT = 'User Entered Min PSMs that apply to all searches in the proj' /* comment truncated */ /*ect*/;


CREATE TABLE project_level_default_fltr_min_psms_prev_tbl (
id INT(10) UNSIGNED NOT NULL,
project_id INT(10) UNSIGNED NOT NULL,
min_psms INT NOT NULL,
created_auth_user_id INT UNSIGNED NOT NULL,
created_date_time DATETIME NOT NULL,
last_updated_auth_user_id INT NOT NULL,
last_updated_date_time DATETIME NOT NULL,
id_prev_record INT UNSIGNED NOT NULL AUTO_INCREMENT,
copy_create_date DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id_prev_record),
CONSTRAINT project_level_default_fltr_min_psms_prev_tbl
FOREIGN KEY (project_id)
REFERENCES project (id)
ON DELETE CASCADE
ON UPDATE NO ACTION)
ENGINE = InnoDB
COMMENT = 'User Entered Min PSMs that apply to all searches in the proj' /* comment truncated */ /*ect*/;


Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,35 @@
<div class="project-level-ann-cutoff-defaults-modal-dialog-overlay-body selector_project_page__ann_cutoff_defaults_project_level_body "
style="max-height: {{ mainBodyMaxHeight }}px; overflow-y: auto;">

<div style="margin-top: 10px; margin-bottom: 10px;">
<div style="margin-top: 10px; margin-bottom: 20px;">
<div >
All data in project will be filtered using these values.
</div>
<div >
Remove all values to disable project-level filtering.
</div>
</div>

<style >
#project_page__ann_cutoff_defaults_project_level_main_table td { padding-left: 0px; }
</style>

<table border="0" id="project_page__ann_cutoff_defaults_project_level_main_table" class=" main-cutoffs-table " >
<tbody >
<tr>
<td style="font-weight: bold;">
Min PSMs
</td>
<td>
<input type="text" maxlength="30" style="width: 150px;"
id="project_page__ann_cutoff_defaults_project_level_psms_min">
</td>
<td>
<div id="project_page__ann_cutoff_defaults_project_level_psms_min_invalid_entry" class=" error-text " style=" display: none;" >
Invalid value. Must be positive integer or empty field.
</div>
</td>
</tr>
</tbody>
</table>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -297,6 +297,8 @@ class ProjectPg_setAnnotationCutoffsDefaults_ProjectLevel_Overlay {

const displayObjects = this._createDisplayObjectsFromWebserviceResponseData({ responseData });

const minPSMs = responseData.existingEntriesResponse.minPSMs;

const $body = $( "body" );

{
Expand Down Expand Up @@ -334,6 +336,15 @@ class ProjectPg_setAnnotationCutoffsDefaults_ProjectLevel_Overlay {
$overlay.appendTo( $body );
}

{
const $project_page__ann_cutoff_defaults_project_level_psms_min = $("#project_page__ann_cutoff_defaults_project_level_psms_min");
if ( $project_page__ann_cutoff_defaults_project_level_psms_min.length === 0 ) {
throw Error("No DOM element with id 'project_page__ann_cutoff_defaults_project_level_psms_min'");
}
$project_page__ann_cutoff_defaults_project_level_psms_min.val( minPSMs );
this._add_MinPSM_InputField__OnChange_Processing({ $project_page__ann_cutoff_defaults_project_level_psms_min });
}

const $project_page__ann_cutoff_defaults_project_level_main_table = $overlay.find("#project_page__ann_cutoff_defaults_project_level_main_table");
if ( $project_page__ann_cutoff_defaults_project_level_main_table.length === 0 ) {
throw Error("No DOM element with id 'project_page__ann_cutoff_defaults_project_level_main_table'");
Expand Down Expand Up @@ -449,6 +460,76 @@ class ProjectPg_setAnnotationCutoffsDefaults_ProjectLevel_Overlay {
}
}

////////// Validate Min PSM Value

/**
*
*/
_add_MinPSM_InputField__OnChange_Processing({ $project_page__ann_cutoff_defaults_project_level_psms_min }) {

const project_page__ann_cutoff_defaults_project_level_psms_min_DOM = $project_page__ann_cutoff_defaults_project_level_psms_min[ 0 ];

project_page__ann_cutoff_defaults_project_level_psms_min_DOM.addEventListener('input', ( eventObject ) => {
try {
eventObject.preventDefault();
// console.log("'input' fired");
const eventTarget = eventObject.target;
// const inputBoxValue = eventTarget.value;
// console.log("'input' fired. inputBoxValue: " + inputBoxValue );
const $eventTarget = $( eventTarget );
const $selector_invalid_entry = $("#project_page__ann_cutoff_defaults_project_level_psms_min_invalid_entry");
var fieldValue = $eventTarget.val();
if ( ! this._isFieldValueValidMinimumPSMValue({ fieldValue }) ) {
$selector_invalid_entry.show();

if ( this._minPSMs_Entry_Valid ) {
this._minPSMs_Entry_Valid = false;

// Value changed so update dependent items
this._update_enable_disable_SaveButton();
}
} else {
$selector_invalid_entry.hide();

if ( ! this._minPSMs_Entry_Valid ) {
this._minPSMs_Entry_Valid = true;

// Value changed so update dependent items
this._update_enable_disable_SaveButton();
}
}
return false;
} catch( e ) {
reportWebErrorToServer.reportErrorObjectToServer( { errorException : e } );
throw e;
}
});
}

_isFieldValueValidMinimumPSMValue({ fieldValue }) {
if ( fieldValue === "" ) {
return true;
}
if ( fieldValue === "0" ) {
return false;
}
// only test for valid cutoff value if not empty string
if ( ! /^[+]?(\d+)$/.test( fieldValue ) ) {
// cutoff value is not a valid integer number
return false;
}
const valueNumber = Number.parseInt( fieldValue );
if ( Number.isNaN( valueNumber ) ) {
return false;
}
if ( valueNumber < 1 ) {
return false;
}
return true;
};

////////// Validate Filterable Annotation Cutoff Value

/**
*
*/
Expand All @@ -475,7 +556,7 @@ class ProjectPg_setAnnotationCutoffsDefaults_ProjectLevel_Overlay {
const $selector_ann_type_containing_row = $eventTarget.closest(".selector_ann_type_containing_row");
const $selector_invalid_entry = $selector_ann_type_containing_row.find(".selector_invalid_entry");
var fieldValue = $eventTarget.val();
if ( ! this._isFieldValueValidNumber({ fieldValue }) ) {
if ( ! this._isFieldValueValidDecimalNumber({ fieldValue }) ) {
$selector_invalid_entry.show();

const indexOverall = annType_Entry.indexOverall;
Expand Down Expand Up @@ -504,7 +585,7 @@ class ProjectPg_setAnnotationCutoffsDefaults_ProjectLevel_Overlay {
});
}

_isFieldValueValidNumber({ fieldValue }) {
_isFieldValueValidDecimalNumber({ fieldValue }) {
if ( fieldValue === "" ) {
return true;
}
Expand All @@ -526,6 +607,8 @@ class ProjectPg_setAnnotationCutoffsDefaults_ProjectLevel_Overlay {
const annotationTypeDataResponse = responseData.annotationTypeDataResponse;
const existingEntriesResponse = responseData.existingEntriesResponse;

const minPSMs = existingEntriesResponse.minPSMs;

// Use objects for index so can increment the index property in called methods

const annotationTypes_Overall_Entries_AllTypes_Index_Container= { index : 0 };
Expand Down Expand Up @@ -744,7 +827,7 @@ class ProjectPg_setAnnotationCutoffsDefaults_ProjectLevel_Overlay {
throw Error("No DOM element with id 'project_page__ann_cutoff_defaults_project_level_save_button'");
}

if ( this._annotationTypes_Entries_UserDataError.size === 0 ) {
if ( this._annotationTypes_Entries_UserDataError.size === 0 && this._minPSMs_Entry_Valid ) {
if ( ! this._saveButton_IsEnabled ) {

project_page__ann_cutoff_defaults_project_level_save_buttonDOM.disabled = false;
Expand All @@ -765,8 +848,10 @@ class ProjectPg_setAnnotationCutoffsDefaults_ProjectLevel_Overlay {
_save() {

const cutoffValuesFromPage = this._getCutoffValuesFromPage();

const minPSMs = this._get_minPSMs_FromPage();

const promise_save_ValuesToServer = this._save_ValuesToServer({ cutoffValuesFromPage });
const promise_save_ValuesToServer = this._save_ValuesToServer({ cutoffValuesFromPage, minPSMs });

promise_save_ValuesToServer.catch( ( ) => { } );

Expand All @@ -779,8 +864,19 @@ class ProjectPg_setAnnotationCutoffsDefaults_ProjectLevel_Overlay {
var $element = $("#set_project_level_default_cutoffs_button_success_message_values_updated");
showErrorMsg( $element ); // Used for success messages as well
});
}

/**
*
*/
_get_minPSMs_FromPage() {

const $project_page__ann_cutoff_defaults_project_level_psms_min = $("#project_page__ann_cutoff_defaults_project_level_psms_min");
let minPSMs = $project_page__ann_cutoff_defaults_project_level_psms_min.val();
if ( minPSMs === "" ) {
minPSMs = undefined;
}
return minPSMs;
}

/**
Expand Down Expand Up @@ -844,7 +940,7 @@ class ProjectPg_setAnnotationCutoffsDefaults_ProjectLevel_Overlay {
// No value so skip to next
return; // EARLY RETURN
}
if ( ! this._isFieldValueValidNumber({ fieldValue : fieldValueString }) ) {
if ( ! this._isFieldValueValidDecimalNumber({ fieldValue : fieldValueString }) ) {
throw Error("_getCutoffValuesFromPage_ForType(...) '! this._isFieldValueValidNumber( fieldValueString )' fieldValueString: " + fieldValueString );
}
const fieldValue = Number.parseFloat( fieldValueString );
Expand Down Expand Up @@ -877,13 +973,14 @@ class ProjectPg_setAnnotationCutoffsDefaults_ProjectLevel_Overlay {
/**
*
*/
_save_ValuesToServer({ cutoffValuesFromPage }) {
_save_ValuesToServer({ cutoffValuesFromPage, minPSMs }) {

return new Promise( (resolve, reject) => {
try {
let requestObj = {
projectId : this._projectId,
cutoffValues : cutoffValuesFromPage
cutoffValues : cutoffValuesFromPage,
minPSMs
};

const url = "services/projectLevelDefaultCutoffs_SaveUpdateEntries_ForProjectId";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -699,6 +699,8 @@ var ImagePagePrimaryRootCodeClass = function() {
var _projectSearchIds;
var _projectSearchIdsUserOrdered = "";

let _defaultsCutoffsAndOthers = undefined;

// Loaded data:

var _allLinkersSupportedForLinkablePositions = undefined; // true or false returned from webservice
Expand Down Expand Up @@ -870,7 +872,7 @@ var ImagePagePrimaryRootCodeClass = function() {
if ( windowHash === "" || windowHash === "#" ) {
// No Hash value so set defaults and return
jsonFromHash = {
cutoffs : getCutoffDefaultsFromPage(),
cutoffs : getCutoffDefaults(),
'excludeType' : EXCLUDE_LINK_TYPE_DEFAULT
};
return jsonFromHash;
Expand Down Expand Up @@ -944,13 +946,13 @@ var ImagePagePrimaryRootCodeClass = function() {
}
if ( json.cutoffs === undefined || json.cutoffs === null ) {
// Set cutoff defaults if not in JSON
json.cutoffs = getCutoffDefaultsFromPage();
json.cutoffs = getCutoffDefaults();
}
// START: Special update to allow projectSearchId values to be added or removed from URL
// Update cutoffs to add defaults for search ids in defaults but not in cutoffs
// Update cutoffs to remove search ids not in defaults but in cutoffs
var cutoffs_Searches = json.cutoffs.searches;
var cutoffDefaultsFromPage = getCutoffDefaultsFromPage();
var cutoffDefaultsFromPage = getCutoffDefaults();
var cutoffDefaultsFromPage_Searches = cutoffDefaultsFromPage.searches;
// Update cutoffs_Searches with values from cutoffDefaultsFromPage
// for any searches in cutoffDefaultsFromPage but not in cutoffs_Searches
Expand Down Expand Up @@ -983,24 +985,6 @@ var ImagePagePrimaryRootCodeClass = function() {
return json;
}

/**
*
*/
function getCutoffDefaultsFromPage() {
var $cutoffValuesRootLevelCutoffDefaults = $("#cutoffValuesRootLevelCutoffDefaults");
var cutoffValuesRootLevelCutoffDefaultsString = $cutoffValuesRootLevelCutoffDefaults.val();
try {
var cutoffValuesRootLevelCutoffDefaults = JSON.parse( cutoffValuesRootLevelCutoffDefaultsString );
} catch( e2 ) {
throw Error( "Failed to parse cutoffValuesRootLevelCutoffDefaults string as JSON. " +
"Error Message: " + e2.message +
". cutoffValuesRootLevelCutoffDefaultsString: |" +
cutoffValuesRootLevelCutoffDefaultsString +
"|" );
}
return cutoffValuesRootLevelCutoffDefaults;
}

/**
*
*/
Expand Down Expand Up @@ -6141,13 +6125,52 @@ var ImagePagePrimaryRootCodeClass = function() {
} );
}


/**
* Get the defaults out of the DOM placed by the Server Side Code and store in Javascript variables
*/
let getDefaultsFromPage = function() {

const $default_values_cutoffs_others = $("#default_values_cutoffs_others");
const default_values_cutoffs_othersString = $default_values_cutoffs_others.val();

try {
const default_values_cutoffs_others = JSON.parse( default_values_cutoffs_othersString );

// Copy only the properties that are set in the server side code
_defaultsCutoffsAndOthers = { cutoffs: default_values_cutoffs_others.cutoffs, minPSMs : default_values_cutoffs_others.minPSMs };

} catch( e2 ) {
throw Error( "Failed to parse default_values_cutoffs_othersString as JSON. " +
"Error Message: " + e2.message +
". default_values_cutoffs_othersString: |" +
default_values_cutoffs_othersString +
"|." );
}
}

/**
*
*/
let getCutoffDefaults = function() {

const default_values_cutoffs = _defaultsCutoffsAndOthers.cutoffs;

return default_values_cutoffs;
}



//////////////////////////////////////////////////

/**
* Initialize the page and load the data
*/
function initPage() {
console.log( "Initializing the page." );

getDefaultsFromPage();

// convert old JSON
console.log( "\tPerforming necessary legacy JSON updates." );
var _legacyJSONUpdater = new LegacyJSONUpdater();
Expand Down

0 comments on commit ed3bcff

Please sign in to comment.