NIH | National Cancer Institute | NCI Wiki  

Error rendering macro 'rw-search'

null

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Next »

National Cancer Institute Center for Bioinformatics LexEVS 5.0 Release Notes May 8 2009

<Unable to render embedded object: File ( * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * The names of contributors may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * Modified and extended Dec 2005, then replaced and enhanced Dec 2006 by Bob Swift. * - original code written by Danny Chen * * This script is compacted before being released to reduce size and improve performance. * This makes it possible to comment the code without worrying about size * - make sure all statements end with a semi-colon, especially inline function definitions. * * Compacted source copyright should be the first line of this source: * // Copyright (c) 2005, 2007 Bob Swift and other contributors. All rights reserved. * * WARNING: Do NOT use a greater than sign in this script) not found. This is a work around for CONF-6490. * / function getElementInnerText(element) { var str = ""; for (var i=0; i<element.childNodes.length; i+) { switch (element.childNodes.item.nodeType) { case 1: //ELEMENT_NODE str += getElementInnerText(element.childNodes.item); break; case 3: //TEXT_NODE str += element.childNodes.item.nodeValue; break; } } return str; } // Trim function that is save to use for null or undefined strings. function trimSafe(v) { return ((v == undefined) || (v == null)) ? "" : v.Trim(); } String.prototype.Trim=new Function("return this.replace(/\\s|
s+$/g,'')"); // Simple number compare // - NaN values are always larger // - if both NaN, compare equal to preserve original ordering in bubble sort function compareNumber(v1, v2) { if (isNaN(v2)) { if (isNaN(v1)) return 0; return 1; // NaN is bigger than all } if (v1 < v2) return -1; if (v1 == v2) return 0; return 1; } // Separated number compare - a separated number is represented as an int array for this function // - v1 < v2 if each number in v1 is <= each number in v2 and if still equal, then if v1 runs out first function compareSeparatedNumber(v1, v2) { for (i = 0; (i < v1.length) && (i < v2.length); i+) { var result = compareNumber(parseInt(v1[i]), parseInt(v2[i])); if (result != 0) return result; } if (v1.length < v2.length) return -1; if (v2.length < v1.length) return 1; return 0; } // sort table columns by the cell provided, only table columns from firstDataRowIndex on // - use the column type parameter to determine: // - how to get values from the cell (valueParser) // - how to compare values (compareFunction) // - this uses a bubble sort on an array of indexes used to reference values (so values only evaluated once) // - optimized for reverse ordering function sortByCell(sortCell, firstDataRowIndex, footingCount) { var compareFunction; var valueParser; compareFunction = compareNumber; if (sortCell.columnType == "I") { valueParser = function(value) { return parseInt(getElementInnerText(value)); }; } else if (sortCell.columnType == "F") { valueParser = function(value) { return parseFloat(getElementInnerText(value)); }; } else if (sortCell.columnType == "C") { valueParser = function(value) { // remove all leading and trailing characters from the first thing that looks like a number return parseFloat(getElementInnerText(value).replace(/[\d\.\,-]
([\d\.\,- ])./, '$1')); }; } else if (sortCell.columnType.charAt(0) == 'D') { if (Date.parseString) { //date.js available valueParser = function(value) { var date = Date.parseString(getElementInnerText(value), sortCell.columnType.substring(1)); return ((date == null) ? NaN : date.getTime()); }; } else { valueParser = function(value) { return Date.parse(getElementInnerText(value)); }; } } else if ( (sortCell.columnType == "/") || (sortCell.columnType == ".") || (sortCell.columnType == "") || (sortCell.columnType == ":")) { compareFunction = compareSeparatedNumber; valueParser = function(value) { return getElementInnerText(value).split(sortCell.columnType); }; } else if (sortCell.columnType == "A") { // already sorted valueParser = function(value) { return 0; }; } else { // otherwise default to string compareFunction = function(v1, v2) { if (v1 < v2) return 1; if (v1 == v2) return 0; return 1; }; valueParser = function(value) { return trimSafe(getElementInnerText(value)).toUpperCase(); }; } //var table = sortCell.sortTable.tHead[0].concat(sortCell.sortTable.tBodies[0]).concat(sortCell.sortTable.tFoot[0]); var headRowCount = (sortCell.sortTable.tHead == null) ? 0 : sortCell.sortTable.tHead.rows.length; firstDataRowIndex = firstDataRowIndex - headRowCount; // adjust for tHead rows var table = sortCell.sortTable.tBodies[0]; var rowCount = table.rows.length - firstDataRowIndex - footingCount; // all data rows that are not footer rows var map = Array(rowCount); // maps sorted position to column index var values = Array(rowCount); // evaluated cell values var compareTest = (sortCell.sortDescending ? -1 : 1 ); // so we can switch between ascending or descending sortCell.sortDescending = !sortCell.sortDescending; // tracks direction of last sort for this column var firstCell = table.rows[0].cells[sortCell.columnIndex]; if ((firstCell != null) && (firstCell.sortTable != null) && (firstCell.sortTable != undefined) && (firstCell.sortTable.sortImage != null) && (firstCell.sortTable.sortImage != undefined)) { // reverse sort arrow firstCell.sortTable.sortImage.setAttribute("src", firstCell.sortDescending ? firstCell.sortTable.sortAttributeDescending : firstCell.sortTable.sortAttributeAscending); firstCell.appendChild(firstCell.sortTable.sortImage); // append or move the sort icon image to this cell } var i; for (i=0; i < rowCount; i) { map[i] = sortCell.sortFirstTime ? i : (rowCount - 1 - i); // favor reverse order after the first time var row = table.rows[i + firstDataRowIndex]; var cellValue = row.cells[sortCell.columnIndex]; values[i] = valueParser(cellValue); // parse and save the values only once } sortCell.sortFirstTime = false; var didSwap; // bubble sort, track whether a order swap occurred do { didSwap = false; for (i=0; i < rowCount - 1; i) { if (compareFunction(values[map[i]], values[map[i+1]]) == compareTest) { saveIndex = map[i]; map[i] = map[i+1]; map[i+1] = saveIndex; didSwap = true; } } } while (didSwap); var tableRows = new Array(); for (i = 0; i < rowCount + footingCount; i) { // save all data and footing rows tableRows.push(table.rows[i + firstDataRowIndex]); } for (i = 0; i < rowCount + footingCount; i) { // remove all data and footing rows table.removeChild(tableRows[i]); } for (i = 0; i < rowCount; i) { // re-populate all data rows in sorter order var row = tableRows[map[i]]; table.appendChild(row); if (row.autoNumber) { // if this row contains an auto number column represents sorted row number row.cells[0].innerHTML = i + 1; // update to current row number } } for (i = 0; i < footingCount; i) { // re-populate all footer rows table.appendChild(tableRows[i + rowCount]); } } // Enable this column to be sortable // - note, unless this is an excluded columnType, enable header columns to be clicked function enableSortOnCell(cell, columnIndex, table, columnTypes, customize) { cell.style.cursor = "pointer"; cell.sortTable = table; cell.sortFirstTime = true; cell.sortDescending = false; cell.columnIndex = (customize.autoNumber ? (columnIndex + 1) : columnIndex); if (columnIndex == -1) { cell.columnType = "I"; } else { cell.columnType = (columnTypes && columnTypes[columnIndex]) ? columnTypes[columnIndex] : "S"; } if (cell.columnType != "X") { cell.onmouseover = function() { this.saveTitle = this.getAttribute('title'); this.setAttribute('title', customize.sortTip + " " + ((this.saveTitle != null) && (this.saveTitle != undefined) ? this.saveTitle : '')); }; cell.onmouseout = function() { this.setAttribute('title', this.saveTitle); }; cell.onclick = function() { sortByCell(this, customize.firstDataRowIndex, customize.footingCount); }; } else { // covers case of auto sort of excluded column cell.columnType = cell.columnType.substring(1); } } function sumColumn(table, index, firstDataRowIndex, columnType) { var total = 0; for (var i = firstDataRowIndex; i < table.rows.length; i) { var cell = table.rows[i].cells[index]; var value; if (cell) { if (columnType == 'C') { value = parseFloat(getElementInnerText(cell).replace(/[^\d\.\,-]([\d\.\,- ]).*/, '$1')) } else { value = parseFloat(getElementInnerText(cell)); } if (!isNaN(value)) { total = total + value; } } } return total; } // Append a automatic total row function appendTotalRow(table, columnTypes, firstDataRowIndex) { var row = document.createElement('tr'); var table = table.tBodies[0]; var columnCount = (0 < table.rows.length) ? table.rows[table.rows.length - 1].cells.length : 0; // number in last row for (var columnIndex = 0; columnIndex < columnCount; columnIndex) { var column = document.createElement('th'); column.className = 'confluenceTh'; column.innerHTML = (columnIndex < columnTypes.length && ( (columnTypes[columnIndex] == 'I') || (columnTypes[columnIndex] == 'F') || (columnTypes[columnIndex] == 'C'))) ? sumColumn(table, columnIndex, firstDataRowIndex, columnTypes[columnIndex]) : ''; row.appendChild(column); } table.appendChild(row); // add row after so it is not part of calculation } // Called for each table row to add all the appropriate attributes function handleRow(table, row, rowIndex, customize) { var columnCount = row.cells.length; for (var i=0; i < columnCount; i) { // each column index i if (customize.enableSorting && (rowIndex <= customize.lastClickableRow)) { enableSortOnCell(row.cells[i], i, table, customize.columnTypes, customize); } // Look for any request for auto sorting if ( (rowIndex == 0) // just look through first row && (customize.sortColumn != '') // request for sorting is given && (customize.sortCell == null) // not already found && ( ((i+1).toString() == customize.sortColumn) || (trimSafe(getElementInnerText(row.cells[i])) == customize.sortColumn) || (trimSafe(row.cells[i].getAttribute('title')) == customize.sortColumn) )) { customize.sortCell = row.cells[i]; } // Apply some default alignment for numeric column types if (customize.firstDataRowIndex <= rowIndex) { if ((customize.columnTypes[i] == "I") || (customize.columnTypes[i] == "F") || (customize.columnTypes[i] == "C")) { row.cells[i].style.textAlign = "right"; } } if (customize.columnTypes[i] == "H") { row.cells[i].style.display = "none"; } // Apply column attributes // - either on all data rows or all rows if requested if (customize.enableHeadingAttributes || (customize.firstDataRowIndex <= rowIndex)) { if (i < customize.attrList.length) { // column is still in list of attributes specified by user for (var j=0; j < customize.attrList[i].length; j) { // loop through each attribute given var attr = customize.attrList[i][j].Trim().split("="); // "attribute = value", so split on = if (1 < attr.length) { var aName = attr[0].Trim(); var aValue = attr[1].Trim(); if ((aName.toLowerCase() == "style") && (2 < aValue.length)) { if ((aValue.charAt(0) == '"')) { // strip double quotes aValue = aValue.substring(1, aValue.length - 1); } row.cells[i].style.cssText = aValue; } else { row.cells[i].setAttribute(aName, aValue); } } } } } } // if autoNumber is requested, add a new column with incremental numbers on all data rows if (customize.autoNumber) { var column = document.createElement(!customize.autoNumberSort || (rowIndex < customize.firstDataRowIndex) ? 'th' : 'td'); column.className = (!customize.autoNumberSort || (rowIndex < customize.firstDataRowIndex) ? 'confluenceTh' : 'confluenceTd'); column.innerHTML = ((rowIndex < customize.firstDataRowIndex) || (customize.totalRowCount - customize.firstDataRowIndex - customize.footingCount < rowIndex) ? '' : customize.dataRowCount); column.setAttribute('align', 'right'); row.autoNumber = !customize.autoNumberSort; row.insertBefore(column, row.cells[0]); if (customize.enableSorting && customize.autoNumberSort && (rowIndex <= customize.lastClickableRow)) { enableSortOnCell(column, -1, table, null, customize); } } // enable row highlighting if requested if ((customize.highlightColor != "") && (customize.firstDataRowIndex <= rowIndex)) { row.onmouseover = function() { this.tableHighLightRowColor = this.bgColor; this.bgColor = customize.highlightColor; }; row.onmouseout = function() { this.bgColor = this.tableHighLightRowColor; this.tableHighLightRowColor = null; }; } } // Setup this table for custom behavior including sorting, highlighting, etc... function customizeMacroTable(tableId, columnTypes, firstDataRowIndex, highlightColor, enableSorting, sortTip, sortColumn, sortDescending, autoNumber, autoNumberSort, enableHeadingAttributes, footingCount, autoTotal, iconLocation) { var customize = new Object; customize.columnTypes = columnTypes; customize.firstDataRowIndex = firstDataRowIndex; customize.highlightColor = highlightColor; customize.enableSorting = enableSorting; customize.sortTip = sortTip; customize.sortColumn = sortColumn; customize.sortDescending = sortDescending; customize.autoNumber = autoNumber; customize.autoNumberSort = autoNumberSort; customize.enableHeadingAttributes = enableHeadingAttributes; customize.footingCount = footingCount; customize.autoTotal = autoTotal; customize.iconLocation = iconLocation; var table = (typeof(tableId) == "string") ? document.getElementById(tableId) : null; if (table) { if (customize.autoTotal) { appendTotalRow(table, customize.columnTypes, customize.firstDataRowIndex); customize.footingCount; // to cover added row } if (customize.iconLocation != "") { // setup for showing sort icon table.sortAttributeAscending = contextPath + customize.iconLocation + "down.gif"; table.sortAttributeDescending = contextPath + customize.iconLocation + "up.gif"; table.sortImage = document.createElement("IMG"); } customize.lastClickableRow = customize.firstDataRowIndex - 1; if (customize.lastClickableRow < 0) { customize.lastClickableRow = 0; // ensure at least the first row is clickable } customize.sortCell = null; customize.dataRowCount = 1; var colAttrs = columnAttributes.split(","); customize.attrList = Array(colAttrs.length); for (var i = 0; i < colAttrs.length; i) { customize.attrList[i] = colAttrs[i].Trim().split(";;"); } var rowIndex = 0; var headRowCount = (table.tHead == null) ? 0 : table.tHead.rows.length; var footRowCount = (table.tFoot == null) ? 0 : table.tFoot.rows.length; var bodyRowCount = table.tBodies[0].rows.length; customize.totalRowCount = headRowCount + footRowCount + bodyRowCount; for (var i = 0; i < headRowCount; i) { // each row in thead var row = table.tHead.rows[i]; handleRow(table, row, rowIndex, customize); rowIndex; } for (var i = 0; i < bodyRowCount; i) { // each row in tbodies[0] var row = table.tBodies[0].rows[i]; handleRow(table, row, rowIndex, customize); rowIndex; } for (var i = 0; i < footRowCount; i) { // each row in tfoot var row = table.tFoot.rows[i]; handleRow(table, row, rowIndex, customize); rowIndex+; } // If user has requested auto sorting of a column before initial display if (customize.sortCell != null) { // auto sort customize.sortCell.sortDescending = customize.sortDescending; sortByCell(customize.sortCell, customize.firstDataRowIndex, customize.footingCount); } } return table; } var columnTypes = ['S']; var columnAttributes = ''; customizeMacroTable('TBL1232154416195', columnTypes, 1, 'lightgoldenrodyellow', true, 'Click to sort', '', false, false, false, true, 0, false, '' ); //-><ac:structured-macro ac:name="anchor" ac:schema-version="1" ac:macro-id="8dc8aa71-b1aa-446b-9740-f8b368368f7a"><ac:parameter ac:name="">LexEVS4.2.1ReleaseNotes-ReleaseHistory</ac:parameter></ac:structured-macro> Release History

Release

Date

LexEVS 5.1
 

????????

LexEVS 5.0

8 May 2009

LexEVS 4.2.1

30 January 2009

LexEVS 4.2

05 November 2008

EVS API 4.1.1

08 August 2008

EVS API 4.1

27 June 2008

EVS API 4.0

07 November 2007

caCORE 3.2

22 December 2006

caCORE 3.1

27 March 2006

caCORE 3.0.1.3

12 December 2006

caCORE 3.0.1.2

18 October 2005

caCORE 3.0.1.1

30 August 2005

caCORE 3.0.1

22 July 2005

caCORE 3.0

31 March 2005

caCORE 2.1

28 May 2004

caCORE 2.0.1

19 December 2003

caCORE 2.0

31 October 2003

caCORE 1.2

13 June 2003

caCORE 1.1

07 February 2003

caCORE 1.0

29 August 2002

New Features and Updates

???

Fixed Since Last Release

Bugs

21567ResourceManager cache not Thread-safe
21923Connection Leak on SQLImplementedMethods 'mapToCodingSchemeName'
22355LexGrid XML exporter not writing correctly if there are two Enitities with the same code but different namespace
22743Unable to resolve GO and CTCAE hierarchy roots.
23278CodedNodeGraph restrictToAssociations fails with Qualifier containing null value
23359Supported Attributes missing from 5.1 NCI Thesaurus 09.08e
23456Loaded MedDRA - unable to see Code System Details
23755Semantic_Type Property not being loaded by Meta Loader
23761Delay advancing a ResolvedConceptReferencesIterator in Distributred mode
23858Duplicate results returned on CodedNodeSet resolve
24148PathToRoot over-protecting for looping hierarchy paths

Feature Requests

21716Add data from MRSAT file to NCI Meta data
21717MRSAB conifgured to load for NCI Meta data
21718MRREL data for NCi Meta - needs more data loaded
21719Load MRRANK data for NCI Meta
21721Add some additional data from MRHIER
21722Make sure MRDOC data for NCI Meta is loaded
21723Add more data from MRDEF file for NCI Meta
21724Add data from MRCONSO file to NCI Meta data
21849Add an algorithm for supporting case-insensitive substring search.
21850Add a search algorithm for supporting case-insensitive substring search with an additional spelling-error tolerant feature.
21879Improve error messages (e.g., CNS.resolve, CNS.resolveToList, CNG.resolveToList)
21881Improve ResolvedConceptReferencesIterator performance by reducing client-server network traffic in distributed mode.
21882LexEVS 5.1 Value Domain Support
21976Improve LexEVS Loading Framework
21980Optimize Lucene code to improve search performance
21982Implement a server side sort to improve performance
22006General SQL optimization
22565Add special character search
22893Add asserted relations into the transitive table
23053Load TUI as a Property in UMLS loader
23071Allow multiple CUI Properties per UMLS Entity
 

Deferred/Deprecated Items

Bugs

CF#19406 - Results not Deserializing Properly when using QueryModifiers on CQL Queries
CF#20590 - Not all concept status property values are accessible through the API.
20653Anonymous class hierarchy with unions not showing up correctly.
20661Ontology for Genetic Interval hierarchy does not match up Protege
20665ECG Ontology missing Description, Date, Source and Creator fields
20684Can not compute root node for OBI version v1.0.1423
20797Strict Owl Processing
23770OBI.owl loading - missing property "has curation status" for concepts
23806OBI.owl loading - Incorrect infromation as value to the property "imported from"
 

Feature Requests

21720Load all MRMAP data
22877MedDRA loading into LexEVS
22887BDA Certification
23324Option to include or exclude anonymous concepts.
23598REST API Features
23611LexEVS Value Domain Support to include persistance of resolved value domain content
23643Java 1.6
 ----

  • No labels