...
- Rebuild data (on backend machine), rebuild and redeploy frontend code
- BAC: ** VETUMLS
- ** UMLSVET
- SNOMED
- ICD
- OWL
- Fix some bugs before rebuilding code (because they don't affect db).Atte
...
- Marketing/SEO - Deploying a demo site with description, screenshots, and video
- Core application enhancement
- Editing features
Marketing/SEO
- PG: Landing and License page
DONE (BAC): Bring "guest "user stuff over from refset
- see services.js and also SecurityServiceJpa.
siblings/children in a hierarchy should have a default sort order (e.g. alphabetical). Try looking up "botulism" in snomed.terminology.tools, it looks random.
- Advanced searching icon having issues - can't click it because of uib-tooltip
- User logs in, sees info, screenshots and videos
- "launch browser" button exists
- upon clicking, it user is presented with a license agreement (if the cookie for it doesn't already exist)
- Upon accepting license, a cookie is created that expires 30 days.
- From accepting license, user enters /content path
- New front-page website with description, screenshots, video
- "Login" link (with logout link on header)
- Have the "upload" and "source" tabs from transformer here
- "Snomed starter kit"
- Create a video demo of the site (camtasia) and post as a link on the header (video glyphicon if there is one)
- also screenshots that are clickable, etc.
- Verify all entry pages for applications are officially mobile friendly
- Update campaigns for SNOMED/UMLS/ICD browsers on google adwords.
- Training Video for UMLS browser (need 10 min)
- Training Video for SNOMED browser (simple 5 min)
- Find the SNOMED video that Anil sent, redo with RF2 - same content!
- Other notes (from email)
- Google adwords campaign
- “free icd-10” browser, “free SNOMED CT US Extension browser”, “free UMLS browser
- Get webmaster setup for the icd/umls/snomed pages
- Use config setup for that
- Find east bay healthcare startups
- Pursue like job search (to know they’re hiring, etc)
- Tech
- Device
- Information/informatics
- Meetups
- Google adwords campaign
Starter Kit
- ConfigureRestServiceImpl (doesn't need an interface and a client) - put this in TermServer project, and TerminologyServerApplication
- isConfigured() - /configured
- checks whether WEB-INF/classes/config.properties exists
- configure(HashMap<String,String> setup)
- Starts with config.properties.start and overwrites settings for
- writes config.properties
- ConfigUtiltiy.getConfigProperties().setProperty("hibernate.hbm2ddl.auto", "create");
- new MetadataServiceJpa
- ConfigUtiltiy.getConfigProperties().setProperty("hibernate.hbm2ddl.auto", "none")
- clearConfiguration()
- removes config.properties file (assumes it is in WEB-INF/classes)
- configure(String db, String username, String password, String applicationDir);
- call other configure method
- isConfigured() - /configured
- configureService.js
- isConfigured
- configure(String username, String password, String applicationDir)
- put config file in starter-kit-rest/src/main/resources/config.properties.start
- app.js
- check isConfigured, if false, location.path("/configure"), sets a flag
- routes.js
- use functions, check configuration flag, etc..
- /configure -> ConfigureCtrl
- configure.html, ConfigureCtrl
- ,,,, need to configure ...
- db:
- user:
- pwd:
- app Dir: (file upload? ... browse button)
- [ configure ] button -> calls configureService.configure with glass pane.
- upon return, redirects page to "/"
- Validate integration tests again!
Core Application Enhancement - P1
Handle landing/license/login set up with a new .js file that gets filtered
Code Block appConfig.js tsApp .value( 'appConfig', { landing : ${deploy.landing.flag}, license : ${deploy.license.flag}, ...
- New front-page website with description, screenshots, video
- "Login" link (with logout link on header)
- Have the "upload" and "source" tabs from transformer here
- "Snomed starter kit"
- Create a video demo of the site (camtasia) and post as a link on the header (video glyphicon if there is one)
- also screenshots that are clickable, etc.
- Verify all entry pages for applications are officially mobile friendly
- Update campaigns for SNOMED/UMLS/ICD browsers on google adwords.
- Training Video for UMLS browser (need 10 min)
- Training Video for SNOMED browser (simple 5 min)
- Find the SNOMED video that Anil sent, redo with RF2 - same content!
- Other notes (from email)
- Google adwords campaign
- “free icd-10” browser, “free SNOMED CT US Extension browser”, “free UMLS browser
- Get webmaster setup for the icd/umls/snomed pages
- Use config setup for that
- Find east bay healthcare startups
- Pursue like job search (to know they’re hiring, etc)
- Tech
- Device
- Information/informatics
- Meetups
- Google adwords campaign
Starter Kit - PG
- ValidatoinResult precheckLoadFromSourceData
- Application hardening
- Error handling during configuration (bad db, username, password)
- directory already exists?
- failed load
- sourceData marked as FAILED -> only support certain actions
- cancelled load -> allow reload of delta
- source data missing, some terminology data loaded
- spelling.txt, acronyms.txt
- package these files into the war. (so they are in WEB-INF/classes)
- getResourceAsStream("spelling.txt") -> source.data.dir/spelling.txt
- DONE: Get initial starter kit running
Core Application Enhancement - P1
Validate integration tests again
- Inferred/Stated button not working properly for SNOMED (e.g. "description logic terminology")
- Tooltips for some things not working in SNOMED (e.g. rel, attribute nmae, etc)
siblings/children in a hierarchy should have a default sort order (e.g. alphabetical). Try looking up "botulism" in snomed.terminology.tools, it looks random.
Advanced searching icon having issues - can't click it because of uib-tooltip
PG: Small finishing items
Once "appConfig.js" exists ,we can stop filtering footer/header, etc and instead inject the appConfig object into those controllers and just make scope variables for what shows up.
DONE (BAC): Bring "guest "user stuff over from refset
- see services.js and also SecurityServiceJpa.
Implement expression searching based on ECL
- Replace the "search criteria" mechanism with this.
- Identify as a search by parsing and confirming it matches.
- Build SQL or lucene queries from ECL.
- See Kai's project on github: https://github.com/IHTSDO/snomed-query-service/snomed-query-service
- Also show expressions (like diagrams) for a concept's de
Compute preferred name enhancements
- support all modes, including multiple meta
- tie to user preferences.
Put all route provider back in routes.js (PG)
- Algorithm -> LoaderAlgorithm
- SourceDataLoaderAlgorithm (interface)
Review overhaul of loader architecture
- Employ a consistent handleLazyIniti strategy
- enforce this at release time (add to wiki)
- public handleLazyInit(...)
- ContentService doesn't need it because of "graph resolver" which is entirely responsible for content objects.
- applies to "source data" and "project" and "metadata" services.
- Normalize use of sortable tables across the application (search in content, admin service tables) - use ng-table
- Enabling "cancel"/progress of loaders
- RrfLoaderAlgorithm (can implement at abstract loader algorithm level)
- cancel() should set a cancelFlag to true
- commit/log statements should check the cancel flag and throw a CancelException
- Add CancelException
- Change content service
- Add "precondition" checking to loaders (Algorithm)
- Put all loader logic into "compute" -> e.g. "open readers", "sort files", etc.
- Source Data Loader
- have try/catch
- support "background" parameter
- add cancelLoad(...)
- load -> processId
- getRunningProcesses(...)
- Put a ticket on wiki to rewire mojos from content service to sourcedataLoaderService (then remove from content service the load methods
- BUG Terminology Removerdoes not correctly handle mapsets
Cannot delete or update a parent row: a foreign key constraint fails (`umlsminidb`.`mapsets_attributes`, CONSTRAINT `FK_a1tfp35h17fsbdl07p9xeex2h` FOREIGN KEY (`attributes_id`) REFERENCES `attributes` (`id`))
- RrfLoaderAlgorithm (can implement at abstract loader algorithm level)
- Finall <i> within <a> and remove the <a> - e.g. atoms directive
- DSS: Bring over logging stuff from refset
- objects - LogEntry, LogEntryJpa
- Add terminology, version,
- activity -> LogActivity.LOADER, RELEASE, EDITING
- RootServiceJpa methods
- RootServiceRestImpl methods
- getLog REST API call from ProjectService
- keep existing method
- add one with: instead of "projectId": and "objectId" take "terminology" , "version", and "activity"
- think about what should add log entries (e.g. loaders, terminology removers)
- idea; anything that changes the db.
- addLogEntry statements ONLY go in RestImpl layer. (and maybe the algorithms)
- Put logging statements for loaders - e.g. Rf2SnapshotLoaderAlgorithm
- Add three local methods
- commitClearBegin(...., terminology, version, activity)
- super.commitClearBegin(...)
if (objectCt % logCt == 0) {
addLogEntry...
}
- logAndCommit(...., terminology, version, activity)
- super.logAndCommit(...)
if (objectCt % logCt == 0) {
addLogEntry...
}
- logInfo(message , terminology, version, activity) - also for warn/error, but add the word "WARNING: " or "ERROR: " to the message
- Change all Logger.getLogger(...).info(...) to logInfo(...) calls
- addLogEnry(...) = use "loader" as username
- also Logger.getLogger(...).info(... )
- commitClearBegin(...., terminology, version, activity)
- Add three local methods
- objects - LogEntry, LogEntryJpa
- DONE PG: redo header/footer - controllers. (like refset tool)
- PG: Implement Diagramming
- model transformation
- Show ONLY for "description logic terminology"
- PG DONE Add features for "deep" relationships when browsing UMLS.
- it is definitely only for "concept" and for "metathesaurus" content
- Add new section to concept report (e.g. "Deep relationships")
- REMAINING: Update integration tests with actual filter values (currently only tests null values)
- Enhancements to RRF preferred name computer
- support multiple UMLS's - e.g. have a high-level terminology/version
- reuse the same default precedence list.
- DONE PG: Use directives for reports
- DONE Component Report
- treeComponent
- semanticTypes
- definitions
- atoms
- attributes
- subsets
- relationships
- deep relationships
- TODO Relationships and deep relationships are not using callback functions, fix this
- DONE Search Result Tree directive
- DONE Component Report
- DONE PG Fixed Infinite cycle digest errors on uib-tooltip-html for refset labels in tree search results (extension highlighting)
- DSS; Project/User/UserPrefs stuff
- User
- Application role
- user preferences
- projectRoleMap (e.g. and project role map adapter)
- Project
- Remove "leads", "authors", "administrators"
- remove "scope" stuff
- Remove actionWorkflowStatusValues
- userRoleMap (and userRoleMapAdapter)
- Bring over UserRole from Refset -> replace term server stuff
- Align Security Service Rest (and Jpa)
- Bring over methods from refset that are missing
- Reconcile differences in the implementation methods.
- ProjectService Rest (and Jpa)
- Remove the scope concept calculation
- Add stuff about user/project (assign,unassign,find...)
- next step: add an "Admin" tab.
- basically borrow from refset and make work for this project.
- User
- PG Use route params to dynamically load a "report" (and be able to bookmark URLs)
- DONE Implement routing for terminologyId/terminology/version/type so we can preserve URLs. can even include ?query=... for the query
- CANCELLED Also clean up the way routes work first so we have
- https://umls.terminology.tools/content
- instead of
- This is likely related to the starting URL redirected to https://umls.terminology.tools/#/
- See http://stackoverflow.com/questions/14319967/angularjs-routing-without-the-hash
- e.g. https://umls.terminology.tools/content/CUI/SNOMEDCT/2015_01_31/12738006
- CANCELLED Also clean up the way routes work first so we have
- DONE Implement routing for terminologyId/terminology/version/type so we can preserve URLs. can even include ?query=... for the query
- DONE Support opening a concept in a new window (e.g. there's a pointing off arrow icon that opens a new window with a routing URL that shows exactly that concept - then drag/drop between windows can be editing mechanism).
- https://umls.terminology.tools/content/simple/cui/SNOMEDCT/2015_01_31/12738006
- Improvement: Fix header offset in simple report
- User Preferences stuff
- Bring over model from Refset tool.
- Add "last query" (e.g. "brain" and whether it's "list" or "tree" mode).
- Add "last report" (e.g. type/ui/terminology/version)
- Remove "void addXXX" and "void removeXXX" methods from model objects. Use getObjects().add/remove(...) only
- e.g. AtomClass doesn't need addAtom or removeAtom
- Rewire any uses of them
- "addXXX" -> "getXXX().add"
- "removeXXX" -> "getXXX().remove"
- same if there is "clear"
- DONE Show concept and atom-level subset information (e.g. language refset entires in SNOMED. may require a change to the graph resolver).
- DefaultGraphResolver now resolves subset members for both Atom and Concept
- Confirm that Descriptor and Code are not intended to have subset members
- Needs testing to confirm UI display ok
- Migration of upload and loading and removal of sources from transformer to term server
- Separate tabCtl, tabService
- Get all workgin,
- Then configure/use in the Starter kit
Core Application Enhancement - P2
- transformer to term server
- Separate tabCtl, tabService
- Get all workgin,
- Then configure/use in the Starter kit
Core Application Enhancement - P2
-
Ronald Cornet ideas for starter kit:
Add some capability to annotate concepts (and save those annotations, and then recover annotated concepts and export them for later use - e.g. SIRS integration).
Also could support some basic refset maintenance (extensional, plus
- Review all the static config info from the config file
-
- determine which have a single option and which have multiple options
- determine which can have a single implementation or need to be copied (e.g. search handler)
- determine how API calls (at JPA) layer work, and how they work at REST layer - make the same.
- etc
- Refactor loader mojos and service calls to all work the same way and use source data loader.
- Refactor Content Service (Rest)
- Separate out concept functions so that they can be deployed without CODE and DUI services
- Release criteria integration tests
- Verify no *java classes have System.out.println
- Verify no *java classes have TODO
- ...
- PG: Support RF2 "atom association refset members" as atom relationships.
- * REMAINING: Need to decide how to handle non-concept association reference refset members (e.g. descriptions)
- IN PROGRESS PG Bring "source data file" and "source data" over from transformer application, along with other things.
- DONE Put the objects into the package structure of terminology server (e.g. put with Project and User)
- Need to update transformer too so it continues to work.
- Leave mojos behind.
- Uploading issues
- Uploaded file count is restricted to 10 for some reason
- Subsequent uploads do not add to the queue
- NOTE: May want to switch to ng-file-upload or flow.js, as they allow folder uploads (angular-file-upload does not)
- In meantime, added flatFileStructure flag to RF2 loader
- Loading notes:
- Added flat file structure setter to RF2 loader to determine whether a webapp load from flat files or normal folder structure load
- TODO Need to do this for other loaders as well
- Must also delete the sorted temp folder for loaders if it exists (otherwise false flag on directory structure)
-
- Added flat file structure setter to RF2 loader to determine whether a webapp load from flat files or normal folder structure load
- Advanced search
- LATER: Expression. - e..g. "Search Criteria" - for "descriptionLogicTerminology" only
- descendants of
- has relationship -> xx
- LATER: Expression. - e..g. "Search Criteria" - for "descriptionLogicTerminology" only
- Show "atom" subset information in the report. Only concept (or component) subset (or refset) information is being shown. this may involve a change in the graph resolver to return the data. i.e. for Snomed you should be able to tell what is just british.
...