Code Monkey home page Code Monkey logo

tkbio's Introduction

The NCAT "Translator" Knowledge.Bio Release 4.0 Java Implementation

Knowledge Graph for Sepiapterin Reductase

This is Knowledge.Bio, a Java-based web application for discovering, navigating, harvesting and organizing conceptual maps of (biomedical) research knowledge.

The software project is a US National Institute of Health funded initiative, begun in 2015, within the scope of the Heart BD2K program as a collaboration between...

  • STAR Informatics/Delphinai Corporation, Port Moody, BC, Canada:

    Dr. Richard Bruskiewich, CEO (2015 - present) Kenneth Huellas-Bruskiewicz (2015 - present) Lance Hannestad (2016,2017) Yinglun "Colin" Qiao (2016,2017) Meera Godden (2017) Chandan Kumar Mishra (2016) Jarielle Lim (2016) Rudy Kong Tin Lun (2016) Farzin Ahmed (2015 - 2016)

  • through an initial collaboration with

    Dr. Benjamin Good

previously at the Scripps Research Institute (TSRI), San Diego, CA, USA

  • The current (2017) effort to advance Knowledge.Bio is a collaboration funded by NIH through the Lawrence Berkeley Laboratory, San Francisco, CA, USA, care of

    Dr. Christopher Mungall

with the objective of repurposing it as a web client for the NIH NCATS Translator initiative.

  • We are also grateful for NIH funding received for the summer of 2017 as brokered by the NCATS Principal Investigator,

    Dr. Christopher Chute

at the INSTITUTE for CLINICAL & TRANSLATIONAL RESEARCH (ICTR), Johns Hopkins University School of Medicine, Baltimore, MD, USA.

Table of Contents

Introduction

As a project of the NCATS Translator Initiative, Knowledge.Bio is a tool for finding and mapping relationships between concepts extracted from the biomedical literature. These links and properties can be visualized, then followed or enumerated further. Researchers can directly access supporting references for a relationship from within the interface. This aides researchers in their ablity to keep track of the assocations between biomedical concepts, create webs of associations that may represent a new hypothesis, evaluate the strength of these assertions, and have jumping-off points for further exploration.

Below is an example of a map created for Sepiapterin Reductase.

Knowledge Graph for Sepiapterin Reductase

Knowledge.Bio requires three parts to function: "Knowledge Beacons", which broadcast biomedical data according to the NCATS API and typically wrap databases; the "Beacon Aggregator", which puts the data together in one place; and the web client itself, whose purposes are outlined above. This architecture is illustrated in the image below. We provide a link to the Github projects for each of these modules at the bottom of this document.

All of these systems can be built and run locally, or otherwise point to remote versions. See the "Beacon Aggregator Setup" and "Reference Beacon Setup" guides if you would like to develop or host those components on your machine. If you have a dataset that you would like to use in particular with Knowledge.Bio, see the "Database Setup and Dataloading" guide.

This particular document outlines the process of getting your own copy of the web client up and running. However, for remote hosting, see the "Remote Deployment" guide for how to host AWS/Tomcat instances as well as deployment with Docker.

Web Client Configuration

Pre-Requisites

Knowledge.Bio Version 4.0 is a multi-project Gradle build of Java components, as defined in multiple subdirectories, and based on Spring Boot and Spring Authentication; the Neo4j graph database, connected to Spring via Spring Data Neo4j using a Neo4j Object Graph Mapping (OGM); plus the Vaadin GUI framework. The current release dependencies for this technology stack are found in the tkbio master build.gradle file.

The application has been developed within the Eclipse J2EE IDE. We don't insure other IDEs. Core prerequisites to build the system within Eclipse include:

The Gradle build process imports the majority of our dependencies. However, before attempting to run the software, you should install a local copy of Neo4j Commuity Edition edition on your development machine (see the root directory's build.gradle file for the preferred current release of Neo4j being used).

How to Install and Run Locally

  1. Before starting, ensure that you install the Gradle-based Buildship tool for Eclipse into your Eclipse IDE. You should also install the latest Gradle version from gradle.org and configure the Buildship tool, in the Eclipse "Window..Preferences" to point to the Gradle distribution folder.

  2. Clone the TKBio project from the Github project repository into a local Git repository on your workstation.

  3. Start up Eclipse with a (preferably empty) workspace folder.

  4. Use the Project "Import from .. Git Repository" to import it into the Eclipse IDE. You should be able to use the "Import as general project" wizard option to load it and select "Search for nested projects".

  5. Selecting the project in the Project Package Explorer, access the (right mouse button) context menu to select "Configure .. Add Gradle Nature". This should configure the project as a working "Gradle" managed project with all the subprojects appearing as separate Eclipse folders within the package manager

This should give you a workable Eclipse installation. You can now proceed to "Spring and Neo4j Configuration" to prepare the application for running (see below).

Before working with the code, Eclipse might show "Problems" tab errors. These do not usually affect the Gradle build process and execution of the application.

Spring and Neo4j Configuration

In order to run the application components of Knowledge.Bio, some basic configuration variables need to be set. The Spring Framework has multiple technical options for achieving this - consult the reference documentation for full details. These are found under the "src/main/resources" folders as a set of Java properties (or equivalent) files.

That said, the project provides templates for a default set of Java Properties-based configuration files for itself, under the "tkbio/config" folder. Copy the template files, removing the "-template" suffix as you copy them into the necessary resources folders. These folders are labeled as "src/main/resources" in all of "tkbio/web/", "tkbio/database/", and "tkbio/dataloader/".

As of August 2017, these are two files required and given templates. The main configuration file is the applications.properties, containing the means for linking to other NCAT project services. Neo4j uses the ogm.properties file the application to the database for user accounts and concept map archives.

You don't need to modify most of these properties, but there are fields which need customization, as follows.

In such "profile" applications there are site-specific database-connection parameters, and "administrative email" settings file. Once defined, you need to specify which particular profile you want to use at startup, by setting the "spring.profiles.active" variable in the applications.properties file.

Particular parameters set in application.properties:

  • spring.profiles.active - sets the profile (e.g. 'dev')
  • spring.mail.host - the SMTP server being used to forward admin emails (e.g. smtp.gmail.com)
  • spring.mail.username - username of the email account being used for forwarding admin emails
  • spring.mail.password - password of the email account being used for forwarding admin emails

One must set up a path to the Knowledge Beacons you will be using for the project in the application.properties file for 'web'. This property, knowledgeBeacon.table.path, must point to a csv file that contains a URL pointing to a valid Knowledge Beacon api. One csv file is provided for example by default in the 'config' folder.

For the Neo4j back end database, some basic configuration is required. Since the current implementation uses Spring Data 4.0, a remote Neo4j server is assumed to be installed and on localhost port 7474.

In addition, this release uses the Object Graph Model (OGM) protocol, so an additional configuration file is needed, called 'ogm.properties'. A templated version of the file is under "src/web/main/resources/config". You should substitute your Neo4j server's 'user' and 'password' in the URI parameter, e.g. in

URI=http://user:password@localhost:7474

for example,

URI=http://neo4j:neo4j@localhost:7474

where neo4j is the default for both user and password.

Running Project Tests

JUnit 4 tests are available for some of the code base (e.g. the database subproject). Although the test dependencies are covered by the Gradle build dependencies, to run the tests properly within Eclipse, you might need more local configuration, as follows:

  • Right click your project in Package Explorer > click Properties
  • Go to Java Build Path > Libraries tab
  • Click on Add Library button
  • Select JUnit 4
  • Click Next.

The following requirements must be fulfilled:

  1. You need to have the relevant version of Neo4j installed and running locally.

  2. You need to have your configuration files - application-dev.properties and ogm.properties - properly configured to point to this local Neo4j instance.

Ideally, configuration files in web/src/test/resources/ should be used, but the tests may inadvertently use your regular configuration files to run, hence, may point to your production database, not the local copy for testing!

The tests may be run by selecting the src/test/java source folder and executing "Run As..JUnit Test".

Loading Data

Earlier versions of Knowledge.Bio retrieved data from a "local" Neo4j project database. This database was now spun off as the "Reference" Knowledge Beacon and Knowledge.Bio converted to an application obtaining its data by polling a list of Knowledge Beacons. Note that this polling task is delegated to the Beacon Aggregator" service.

The list of beacons currently polled is hard coded in a Translator Knowledge Beacon project list but in the future, will likely be managed within the Beacon Registry.

How to Run Knowledge.Bio on a Docker Container

Docker is a virtualization framework that let you run self-contained instances of web applications (and others). Knowledge.Bio supports Docker out of the box. We encourage using Docker due to its versitality in both local and remote deployments. Before looking at how to deploy Knowledge.Bio with Docker, be sure that the latest version is installed.

If you are using OS X or Windows, make sure the Docker daemon is running by using Docker Tools, running both docker-machine start <your-machine> and eval $(docker-machine env <your-machine>) (replacing with the name of your machine) in your console.

Then ensure that you know the internal IP of your by printing the configuration; you can use cat docker-machine env <your-machine> to find this IP for the property DOCKER_HOST. This will be used for accessing the deployment later.

TODO: Exposing Volumes

  1. Build the application using gradle clean war in its root folder. You may also build the project in Eclipse using the Context Menu. Run as -> Gradle Build... -> type in "clean war". Either of these commands will build your project and sub-projects into a WAR package, located in the "tkbio/web/build/libs" folder.

  2. Make sure that you have installed, or have access to, a running installation of Neo4j release 2.3.* or greater�. Open Neo4j Community Edition GUI and select the folder where the database has been saved. The first time you run it, open the the link provided (by default, localhost:7474) and change default password to a suitable password, which you will record in the application configuration files. Otherwise use the command line.

  3. Use docker build -t ncats:tkbio . to build your application as a Docker image. To check whether it was successfully created, run docker images #. You should see "ncats" listed as an image.

  4. Finally, use docker run --rm -p 8079:8080 ncats:tkbio & to (a) run the application, and (b) remap the container app's port to port 8079 of the broadcasted IP.

You should now be able to access Knowledge.Bio in the browser via port 8079 of your machine's internal IP (example, http://192.168.99.100:8079). You can replace that port number with whatever you like.

How to Run Knowledge.Bio Locally

If you don't want to run Knowledge.Bio in Docker for local development, you can run the application in bare-bones Eclipse:

  1. Build the project using gradle clean war or using the Eclipse context menu on the root folder of the project, as outlined above.

  2. In the Eclipse context menu on the root project, click "Gradle (STS)..Refresh All" for all the projects to pull in dependencies.

  3. As in the Docker deployment above, make sure that you have access to a running installation of Neo4j. Open up Neo4j Community Edition GUI and select the folder where the database has been saved and ensure proper password configuration. Otherwise use the command line.

  4. Select the "bio.knowledge.Application" class located in the "web/src/main/java/" subfolder, then "Run As..Java Application". Ensure that your Neo4J database is running before this point!

  5. Open up "http://localhost:8080" in your browser. Voila. If you want to access the database from a non-localhost IP, you need to go into the neo4j-server.properties or (in Linux environments, the /etc/neo4j/neo4j.conf file) to uncomment out the org.neo4j.server.webserver.address=0.0.0.0 (or dbms.connector.http.address=0.0.0.0 in the Linux file).

Troubleshooting

Gradle and the Eclipse IDE live in an uneasy truce. Sometimes, when you are experiencing strange "NoSuchClassFound" errors, that suggests inconsistent library releases clashing with one another. In such circumstances, it is helpful to review the whole hierarchy of Gradle dependencies by running:

gradle dependencies

then update these dependencies to the latest versions, as required. Afterwards, run a

Project..Clean...

from the popup menu. For good measure, close then reopen the root project and its related sub-projects. When desperate, exit Eclipse then restart it, then rebuild the project. This magical mixture of activities can purge the system to give a cleaner build.

Other links

The following are links relevant for developing and maintaining Knowledge.Bio.

These links are for other projects which give Knowledge.Bio its back-end, as was illustrated above.

tkbio's People

Contributors

cmungall avatar isuen avatar lhannest avatar meera-gd avatar richardbruskiewich avatar yinglunq avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tkbio's Issues

Improve pagination functionality in statement table

It is very hard to get a sense of the overall breadth of statements with the current pagination approach, where the user has to scroll to the bottom to add new statements. And if a filter is set, the new statements get sorted as they are added so it is not clear which are new. Overall it is a very cumbersome workflow. Two suggested improvements:

First, I would like the option of loading all results at once.

Second, I would like to see a count of the total number of results displayed, that gets updated when a user selects a filter.

Concept Aggregation (via exactMatches service)

When one Beacon uses a unique id system such as Entrez gene, another Beacon uses a system like Ensembl, and other Beacons are capable of providing mappings from 1 concept id scheme to the next, provide functions for integrating equivalent concepts such that e.g. in the graph view, they do not get separated into different nodes and in the table view, all the statements are properly merged together.

Example. Here is a call to a Beacon that uses ensembl ids
http://52.15.182.253:8090/api/concepts/ensembl%3AENSP00000336701
Here is one to a Beacon that uses wikidata ids
http://garbanzo.sulab.org/concepts/wd%3AQ18031015

garbanzo exactMatches can get from wd:Q18031015 to NCBIGENE:5889

An exact matches service could be generated using mygene.info to map from ncbigene:5889 to ensembl:ENSP00000336701 http://mygene.info/v3/api#MyGene.info-gene-annotation-services-GET-Gene-annotation-service

So, we ought to be able to stitch together a single 'entity' containing the 'equivalence clique': {ncbigene:5889, wd:Q18031015, ensembl:ENSP00000336701 } and this clique should make it possible to aggregate content from beacons that work with any of these different id systems.

(Caveat for example, that it may be more appropriate to link ncbigene:5889 to ensembl:ENSP00000336701 via a statement like "X encodes Y" as the former is a gene entry and the latter is a protein entry. We will have to rely on documentation and the Beacon providers implementation of that documentation to get semantic decisions like that accomplished.)

#Beacon-Aggregator

Improve filtering functionality in tk.bio interface

Finding the types of concepts and statements one wants is currently challenging. Some simple enhancements to filtering functionality that could improve this:

  1. Fix Relation Filtering: This is a very valuable feature that is currently not working. Also, it would be nice if the user was presented with a dropdown of all relations used in statements in the table so they could select one or more to filter/facet on.

  2. Fix Statement Filtering by Semantic Type: Also doesn’t seem to be working. e.g. after filtering to select Genes, statements that have nothing to do with Genes are still returned. I assume the desired functionality here is to return only statements where the S or O is tagged with the Gene semantic type.

  3. Allow users to select multiple types when setting filters.

  4. Allow filtering by source from within the concept and statement results tables. Currently filtering by source is only available outside the context of search results.

Navigation menu doesn't reflect login state

If you log in and then open the site in another browser tab, the navigation menu in the second tab shows the Login button instead of the Logout and My Account buttons. This second tab otherwise still acts as if you are logged in (for example you can navigate to the My Account page by manually entering the URL).

NOTE: the same thing happens in the old version

Merge Cliques in "Concept by text" search table

The concept table popup window that returns matches for key word searches presents matches of identifiers form all sources, without merging the entries by clique. Clearly, presenting one row entry per clique would make more sense; however, some way of restructuring the presentation of the output is necessary, to still present to the user all matching identifiers indexed by their beacon source.

Note that presenting all matches may be challenging due to the number of equivalent identifiers in a given clique (maybe need to create a new popup window of some kind which presents the aliases in a structured fashion...)

Differences in this version

These are some observations of functionality that behaved differently in the old version. They may or may not be bugs:

  • when evidence is opened in the Reference tab, the "Search Reference ID" box is no longer pre-populated with the article's ID
  • filtering concepts by Semantic Group still leaves some results with a different group in the Semantic Group column
  • switching to the Relations tab from one of the other tabs causes its contents to be reloaded

Exact match search

When searching for concepts, exact matches are mixed in with matches that contain the search term, including matches with the search term in the middle of a word. This can cause the search results to have low relevance. One example is that when searching for "liver," the 1st result is "Drug Delivery Systems," the 4th result is "Liver dysfunction," and "Liver" doesn't appear until the 3rd page.

Beacon Query Console

There should be a way for people to see the HTTP requests and responses and errors that occur when using the tkbio application.

Shareable concept map links

Instead of a full URL, the Concept Map Details window shows strings like /#map=Big Map. Additionally, URL's of the form <website>/#map=<mapname> just show a Vaadin error page.

Show Abstract In New Window

Clicking the "Show Abstract In New Window" button brings up the original abstract that you clicked on in the evidence view, and not the actual page you're looking at. This can go wrong if you search for an abstract by a pmid, or click a link on the pub med article.

Concept map node colouring is not working

In Release 3.0 of Knowledge.Bio, concept nodes in the concept map were color coded to reflect concept type (e.g. gene, drug, disease). This doesn't seem to work at the moment (need to check CSS mappings to semantic groups?)

Relationship edge rendering to concept map doesn't always work?

In particular, in the "concept details" display of a given concept (using details from WikiData), there may be objects that have a button "Add to Map" (which generally means that they are an associated WikiData concept). These edges don't seem to be added to the concept map anymore?

Concept map export not working

Exporting maps (in any format) doesn't produce a file. In Safari, nothing happens at all. In Chrome, the download has the message:

dl
Failed - Network error

Telling Chrome to resume the download changes the message to:

dl
Failed - No file

Showing evidence for wrong relationship

Selecting an edge on the concept map and clicking Show Evidence shows evidence for the wrong relationship. (There is no such problem with the View evidence buttons in the Relations tab.) If the other relationship is on the concept map, it gets highlighted (otherwise, no edges are highlighted). The evidence being shown is actually the evidence you would get if you:

  1. Select the subject (no arrow-head) of the edge you clicked
  2. Click on Show Relations
  3. Click on the first View button in the Relations tab

Upgrade to Vaadin 10 to support Web Components

Proposed enhancement.

Due to previous discussions over the past three weeks, it became clear that one path for adding value to TKBio is to revise our search entry-point, revise our table display, and potentially revise our graph visualization (in that order).

This may require us to rapidly extend the Vaadin library if there are no closely analogous components to what we are looking to achieve.

Vaadin 10 has given support for the W3 Web Components Standard. Advantages of Vaadin adhering to this standard is the introduction of HTML5-driven interactions (while maintaining backwards-compatibility with their existing library) that can be decoupled from the rest of the system.

This signifies a potential efficiency gain in implementing custom components and expanding the suite of expertise available to our project. I will look into whether there are any backwards-compatibility issues and try for an upgrade.

Fix metadata display and navigation functions on blackboard nodes

At present, tk.bio behavior when clicking on a concept node in the blackboard is variable. For some concepts (mostly Wikidata ones) a nice table showing concept metadata appears, and the user is given the option to show relations' for that concept in the statement table. But for many concepts (e.g. those from Biolink), no metadata is returned, and the 'show relations' button does not work. This is a significant barrier to navigation of the data in the way we would like to support.

Image below shows dialog box returned after clicking a concept node from Biolink - no metadata returned as for most Wikidata nodes, and also the 'show relations' box is inactive/greyed out.

image

Clicking "add to graph" throws null pointer error.

java.lang.NullPointerException: null
	at bio.knowledge.web.view.StatementsViewPresenter.lambda$2(StatementsViewPresenter.java:170) ~[main/:na]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_141]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_141]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_141]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_141]
	at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:508) ~[vaadin-server-7.6.5.jar:7.6.5]
	at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:198) ~[vaadin-server-7.6.5.jar:7.6.5]
	at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:161) ~[vaadin-server-7.6.5.jar:7.6.5]
	at com.vaadin.server.AbstractClientConnector.fireEvent(AbstractClientConnector.java:1008) ~[vaadin-server-7.6.5.jar:7.6.5]
	at com.vaadin.ui.Button.fireClick(Button.java:377) ~[vaadin-server-7.6.5.jar:7.6.5]
	at com.vaadin.ui.Button$1.click(Button.java:54) ~[vaadin-server-7.6.5.jar:7.6.5]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_141]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_141]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_141]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_141]
	at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:158) ~[vaadin-server-7.6.5.jar:7.6.5]
	at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:118) ~[vaadin-server-7.6.5.jar:7.6.5]
	at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:408) [vaadin-server-7.6.5.jar:7.6.5]
	at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:273) [vaadin-server-7.6.5.jar:7.6.5]
	at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:79) [vaadin-server-7.6.5.jar:7.6.5]
	at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:41) [vaadin-server-7.6.5.jar:7.6.5]
	at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1409) [vaadin-server-7.6.5.jar:7.6.5]
	at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:364) [vaadin-server-7.6.5.jar:7.6.5]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) [tomcat-embed-core-8.0.23.jar:8.0.23]
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:808) [jetty-servlet-9.2.10.v20150310.jar:9.2.10.v20150310]
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669) [jetty-servlet-9.2.10.v20150310.jar:9.2.10.v20150310]
	at org.springframework.boot.actuate.autoconfigure.EndpointWebMvcAutoConfiguration$ApplicationContextHeaderFilter.doFilterInternal(EndpointWebMvcAutoConfiguration.java:281) [spring-boot-actuator-1.3.7.RELEASE.jar:1.3.7.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE]
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) [jetty-servlet-9.2.10.v20150310.jar:9.2.10.v20150310]
	at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:115) [spring-boot-actuator-1.3.7.RELEASE.jar:1.3.7.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE]
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) [jetty-servlet-9.2.10.v20150310.jar:9.2.10.v20150310]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
	at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
	at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
	at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
	at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
	at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
	at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) [spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE]
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262) [spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE]
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) [jetty-servlet-9.2.10.v20150310.jar:9.2.10.v20150310]
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) [spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE]
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) [jetty-servlet-9.2.10.v20150310.jar:9.2.10.v20150310]
	at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:87) [spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE]
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) [jetty-servlet-9.2.10.v20150310.jar:9.2.10.v20150310]
	at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) [spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE]
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) [jetty-servlet-9.2.10.v20150310.jar:9.2.10.v20150310]
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) [spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE]
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) [jetty-servlet-9.2.10.v20150310.jar:9.2.10.v20150310]
	at org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:103) [spring-boot-actuator-1.3.7.RELEASE.jar:1.3.7.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.2.RELEASE.jar:4.3.2.RELEASE]
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) [jetty-servlet-9.2.10.v20150310.jar:9.2.10.v20150310]
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585) [jetty-servlet-9.2.10.v20150310.jar:9.2.10.v20150310]
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) [jetty-server-9.2.10.v20150310.jar:9.2.10.v20150310]
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577) [jetty-security-9.2.10.v20150310.jar:9.2.10.v20150310]
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223) [jetty-server-9.2.10.v20150310.jar:9.2.10.v20150310]
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127) [jetty-server-9.2.10.v20150310.jar:9.2.10.v20150310]
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515) [jetty-servlet-9.2.10.v20150310.jar:9.2.10.v20150310]
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) [jetty-server-9.2.10.v20150310.jar:9.2.10.v20150310]
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061) [jetty-server-9.2.10.v20150310.jar:9.2.10.v20150310]
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) [jetty-server-9.2.10.v20150310.jar:9.2.10.v20150310]
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) [jetty-server-9.2.10.v20150310.jar:9.2.10.v20150310]
	at org.eclipse.jetty.server.Server.handle(Server.java:497) [jetty-server-9.2.10.v20150310.jar:9.2.10.v20150310]
	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310) [jetty-server-9.2.10.v20150310.jar:9.2.10.v20150310]
	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) [jetty-server-9.2.10.v20150310.jar:9.2.10.v20150310]
	at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540) [jetty-io-9.2.10.v20150310.jar:9.2.10.v20150310]
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) [jetty-util-9.2.10.v20150310.jar:9.2.10.v20150310]
	at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) [jetty-util-9.2.10.v20150310.jar:9.2.10.v20150310]
	at java.lang.Thread.run(Thread.java:748) [na:1.8.0_141]

Remove duplicate rows from statement table

There are often many rows with the same statement returned. Seems that they all come from Wikidata. Makes navigation and finding desired statements difficult. Example below.

image

Navigate to valid URLs from any page

Currently, the password reset links and concept map links are only accessible when navigating to the link from a new browser tab (or from a different website). This is because these URLs are only processed in the DesktopUI::init() method. The user should be able to navigate to these pages even if they are already in the application.

No links from gene to disease (SLC26A3)

From @cmungall on January 3, 2018 21:33

On this gene:
image

There are no links to diseases

these are available through the monarch instance of biolink:

https://api.monarchinitiative.org/api/bioentity/gene/OMIM%3A126650/diseases/?fetch_objects=true&rows=100

The only query results seem to be wikidata and semmeddb, even though I have others checked:

image

The logs don't help much - I click to see these and it takes me to https://kba.ncats.io/errorlog?sessionId=s3Wg7ENqMudJy75fyJbA which is a json file with [] in it

Copied from original issue: NCATS-Tangerine/translator-knowledge-beacon#35

Disappearing edges when re-adding a deleted node

According the FAQ ("How do I remove an element?"), after deleting a node from a concept map, the user can restore both the node and the edges that were connected to it with it by adding the concept back to the map from the Relations tab. This works at first, but manipulating the concept map (for example by clicking on a node) causes the restored edges to disappear (except for the one(s) that were explicitly re-added from the Relations tab).

NOTE: this is not new. The same thing happens in the old version

Never-ending search results

When searching for a concept, results from certain beacons seem to be repeating in an endless(?) loop, which makes the search results seem infinite. In particular, results from Monarch and String-db.org wrapper results do this. Additionally, the repeating results seem to appear no matter what Semantic Group filter is selected (although they do obey the text filter).

Gradle 4 build fails

The build file must be malformed. Building from Eclipse works fine (probably because Eclipse has more knowledge about the project), but building with gradle 4 fails:

$ gradle4 --version

------------------------------------------------------------
Gradle 4.5
------------------------------------------------------------

Build time:   2018-01-24 17:04:52 UTC
Revision:     77d0ec90636f43669dc794ca17ef80dd65457bec

Groovy:       2.4.12
Ant:          Apache Ant(TM) version 1.9.9 compiled on February 2 2017
JVM:          1.8.0_151 (Oracle Corporation 25.151-b12)
OS:           Linux 3.13.0-124-generic amd64
$ gradle4 build
Starting a Gradle Daemon (subsequent builds will be faster)

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':bootRepackage'.
> org.gradle.api.artifacts.ProjectDependency.getProjectConfiguration()Lorg/gradle/api/artifacts/Configuration;

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 3m 37s
21 actionable tasks: 5 executed, 16 up-to-date

Provide multi-modal search box: by keyword, by CURIE and by sentence

The simple keyword search of concept names works well most of the time, but sometimes a user will already know exactly which concept they want by CURIE identification. It would still be convenient to be able to insert such a CURIE into the search box somehow, or perhaps, constrain the search to the identifier space. In addition, we may wish to support a kind of query based on user inputting of a sentence.

Data counts

Simplification of issue #61. Our new KBA architecture makes this feasible. When showing the results of statements and concepts queries to the KBA:

  • Have an option to retrieve all results at once (maybe setting page size to unlimited?).
  • Show the number of results displayed and the number of total results available.
  • When applying filters on the results, update those counts to reflect what is being viewed.

@YinglunQ Talk with me if you have questions about this.

Buttons with Unimplemented Functionality

Buttons with unimplemented functionality:

  • the extra Add to Map buttons (in the concept details pop-up next to Medical Specialty or Drug Used for Treatment) throw Not Implemented Exceptions
  • the Add Annotation buttons (in the concept map pop-up when logged in) throw Not Implemented Exceptions
  • the green library buttons (in the the Library column of the concept-picking window) all have zeroes on them and don't do anything when clicked
  • column names (in any list view) don't sort the results when clicked, although they still toggle between the up and down arrows

Make the application's URL's better represent the application state

Right now the URL only loosely represents the state of the application (e.g., whether you're in the relations view or concepts view, and so on). This could be better. For example:

When going into the relations view, the URL should be something like /#!list/relations/CONCEPT_ID, so that the user can copy and save this url, and then paste it into their browser later to come back to the same thing.

Searching with no beacons results in divide by zero error

If you uncheck all beacons prior to a search, the search attempts to go through but returns a divide by zero error in ListContainer at line 384 (in the loadDataPage function).

Needless to say this is a pathological case, I would both want to make it fail gracefully if a search does go through with no beacons at the very least. We could add a prompt stating that you have no beacons selected, or otherwise force the user to have at least one beacon checked at all times.

Concept map loading not working

In resolving issue #31, statementId's were adding to the graph. But concept maps saved (or exported) before that don't have the statementId field. This causes an error to be thrown when trying to add old concept maps to the graph.

Showing relations for Object not working

In the Relations tab, clicking on a concept in the Object column and then clicking Show Relations doesn't show its relations. The problem doesn't occur when you click on a (object) node on the concept map and click Show Relations.

Odd results in search

Searching for stress disorder:

image

Note I seem to have all beacons selected:

image

In a distributed system we should be resilient to some beacons returning odd results. However, we still need to provide some kind of recommendations as to search behavior.

Also, we need to be able to see which beacon each search result is coming from

Fix direction of relations in statement table and blackboard display

Statement tables: S and O often wrong for a given triple in the statement table (but arrow will sometimes be in the correct direction if added to graph). e.g. below, vemurafenib should be in the subject column for 'drug used for treatment' statements, but instead are in the object column.

image


Blackboard arrows: Direction of arrows on relations between concepts on the 'blackboard often appear in the wrong direction. e.g. both arrows are wrong in the example below.

image

Management of gene orthologs (Taxonomic context of concepts in general)

Gene symbols (e.g. SSH) are a bit degenerate with respect to ortholog loci. This presents a couple of challenges for TKBIO:

  1. The nature of the differences is not explicit in the UI, that is, two identical symbol names may correspond with the loci from distinct taxa (species) but this is not easy to ascertain from the UI

  2. strict concept equivalencies do not merge subgraphs anchored on orthologous loci, which albeit intellectually honest, looks odd on the concept map in that disconnected subgraphs appear with duplicated gene symbol labels.

Although not strictly aggregation of "equivalent concepts", it is nonetheless a comparable task of comparative functional genomics a la Eisen to merge gene concepts based on orthology.

Concurrently, though, it would be helpful to have some visible mechanism to display the taxon (species) of the (gene) concepts being displayed: using colour, tool tip labels, direct text labels, (?)

User Annotations

Currently for users to add annotations the statement and concepts that are being annotated must be in our database. This is a problem now that concepts and statements are being distributed across many knowledge sources.

As of now, the adding of user annotations is broken. We should rethink how we will handle this.

One idea is to have ForeignConcept and ForeignStatement nodes in our neo4j database that represent concepts and statements coming from other knowledge beacons. We can then get our tkbio application to load that data as needed, when using foreign objects.

Fix metadata display and navigation functions on blackboard nodes (copied over from beacon-aggregator issue #19)

At present, tk.bio behavior when clicking on a concept node in the blackboard is variable. For some concepts (mostly Wikidata ones) a nice table showing concept metadata appears, and the user is given the option to show relations' for that concept in the statement table. But for many concepts (e.g. those from Biolink), no metadata is returned, and the 'show relations' button does not work. This is a significant barrier to navigation of the data in the way we would like to support.

Image below shows dialog box returned after clicking a concept node from Biolink - no metadata returned as for most Wikidata nodes, and also the 'show relations' box is inactive/greyed out.

image

Zoom slider out of sync with graph view

When the concept map changes size (which can happen when adding/removing nodes or changing the layout) or when zooming is done with a trackpad/mouse, the slider's position is not updated. Once the slider is out-of-sync, sliding it can cause the view to be zoomed in the opposite direction. For example:

You start with an empty graph at zoom level 100. Adding everything in the Relations tab to an empty graph results in a tiny graph that is supposed still at zoom level 100. Moving the slider even slightly will cause the graph to be abruptly zoomed in super close, even though, according to the slider positions, you technically zoomed out from 100 to 99.

NOTE: this is not new. The same thing happens in the old version

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.