Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • DONE (BC): Fix long error header - attach icon not showing, where it displays error is not in the error area.
  • DONE PG: Need to index atoms as lowercase string, punctuation replaced by whitespace, no trailing, duplicate, or leading whitespace.
    • Create a new tokenizer factory for this and define in @AnalyzerDefs in AbstractAtomClass
    • "Cholsterol.in HDL/Cholesterol.in LDL" => " cholesterol in hdl cholesterol in ldl"
    • "ABC def----ghi" => "abc def ghi"
    • "ABC     ////df3948123,.3482932–..xx abc" => "abc df3948123 3482932 xx abc"

    • Add an AtomJpa method called getNameNorm() that isn't analyzed but returns a lowercased string split on punctuation

    • Put algorigthm into ConfigUtility - getIndexerNormalizedString
      • String.join(" ","hiv antibody".toLowerCase().split("[ \t-({[)}]_!@#%&*\\:;\"',.?/~+=|<>$`^]")).replaceAll(" +"," ");
    • Default search handler can include as a boosted "or" clause in the query, e.g. by 10
      • if literalField.endsWith("Sort"), create normField = literalField.replace("Sort","Norm"),
      • add an OR clause with this field and the normalized value.
    • "HIV Antibody" => 
      • (HIV Antibody OR nameNorm:\"hiv antibody\"^10.0 OR nameSort:\"HIV Antibody\"^20.0) AND ...
    • "1-2,Anydroxy" =>
      • (1-2,Anhydroxy OR nameNorm:\"1 2 anhydroxy\"^10.0 OR nameSort:\"1-2,Anhydroxy\"^20.0) AND ...
  • DONE PG Clear filters on new searches or navigating (e.g. atom filters stick around)
    • Added function resetPaging(), called on load (instantiates filters and paging)
    • getComponentFromTree and getComponentFromType now clear paging on successful component retrieval
  • DONE PG Relationship sort order - allow sorting on REL, RELA, or TO(terminology)ID
  • DONE PG Color code search results based on log base value -> GREEN for high, YELLOW, RED for low.  Based on score indexed to a 1 value.
    • Normalize scores with a "log base", e.g. take the raw score (may be 12.5, may be 0.83) Choose a log base, e.g. "5", if the score is > 5, it gets a value of 1, otherwise it is the log of the score with the base (e.g. "5").
    • when getScoreMap is called -> every score should be in a range from 0 - 1
  • DONE PG: Advanced search - like mapping
    • Semantic type - [ picklist ]
      • semanticTypes.semanticType:"Clinical Drug"
    • term type  - [ picklist ]
      • atoms.termType:...
    • match terminology - [ picklist ] (only for "metathesaurus")
      • atoms.terminology:..
    • language  - [ picklist ]
      • atoms.language:...
  • DONE PG: support multiple sort fields
    • keep pfsParameter sortField
    • pfsParameter.get/setSortFields(List<String> fields)
    • sortFields overrides sortField
    • Handle in IndexUtility where new Sort(...) is.  Make sure to handle date & id fields as LONG and other fields as STRING.
  • DONE PG Relationship Filter needs to search more efficiently
    • e.g. only single word matching currently performed ("600" does not return "600mg" terms)Misc
      • Look at how relationship searching is performed
        • Fixed by adding wildcard searches directly from webapp
      • DONE Misc. improvements:
        • Return to page 1 on change of filter or sort field/sort order
        • Add tooltip to sort order icon
      • NEW DONE Relationships should be loaded with blank value instead of 0 (RRF loader, line 2151)
      • DONE Index DONE Index toFromName on ConceptRelationshipJpa, CodeRelationshipJpa, DescriptorRelationshipJpa
    • IN PROGRESS PG Implement atom class search handler
      • DONE Should search name and id fields 
      • Should only search id fields if query contains no white space (i.e. could possibly be an id)
        • Add alphanumeric checks as well (must contain 1 number)
      • DONE Should throw exception if invoked on a non-AbstractAtomClass
      • Current weights:
        • Terminology Id -> 4.0 NOTE This is across all fields (boosted expression)
          • Includes atom.conceptId, atom.descriptorId, atom.codeId
        • Name (Sort) -> 4.0
        • Name (Norm) -> 2.0 
        • Name (by split term) -> 1.0
      • Split term needs to respect quoted terms, e.g. "a b", "a b" c "d e f"
    • PG: Scale down DefaultSearchHandler
      • Get rid of acronym expansion
      • Get rid of spelling checks
      • Get rid of normalized field checking
      • Goal:  text in, results out, basic filtering/searching features
        • Fielded search
        • If no results literal search
        • If no results wildcard-appended search
    • PG: redo header/footer - controllers. (like refset tool)
    • PG:  Implement Diagramming
      • model transformation
      • Show ONLY for "description logic terminology"
    • Enhancements to RRF preferred name computer
      • support multiple UMLS's - e.g. have a high-level terminology/version
      • reuse the same default precedence list.
    • PG: Use directives for reports
      • Move all http calls to services.
    • DONE PG: Paging controls are no longer showing up for subcategories (e.g. atoms, relationships)
    • Use route params to dynamically load a "report" (and be able to bookmark URLs)
    • 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).
    • 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"
    • DSS: Model
      • Mapping, MapRecord, MapEntry (each with attributes) - 
        • similar to Subset, SubsetMember except with one more layer.
      • MapSet extends ComponentHasAttributes
        • name (String)
        • type (String)
        • fromTerminology/Version: String
        • toTerminology/Version: String
        • to/fromComplexity (String)
        • to/fromExhaustive (String)
        • get/setMappings -> use mappedFrom in @OneToMany
      • Mapping extends ComponentHasAttributes
        • fromTerminologyId, fromIdType
        • toTerminologyId, toIdType
        • mapSet
        • relationshipType, additionalRelationshipType
        • subsetId => group
        • rank
        • rule
        • restriction -> rename to 'advice'
        • In Jpa class
          • Add  @XmlTransient methods with @Field
          • getFromTermionlogy(), getFromVersion() - call getMapSet().getXXX
          • getToTermionlogy(), getToVersion() - call getMapSet().getXXX
      • Remove MapObject
      • MappingList/Jpa 
      • ContentService - Jpa
        • add/remove/update MapSet/Mapping
        • getMapping(Long id)
        • getMapping(String terminologyid, terminology, version, branch)
        • findMappingsForMapSet(Long mapSetId, query, pfs)
        • findMappingsForConcept(Long conceptId, query, pfs)
          • call getConcept(conceptId).
          • then perform a "from" search based on the terminologyId, terminology, version, and idType (e.g. CONCEPT)
        • findMappingsForCode(Long codetId, query, pfs)
        • findMappingsForDescriptor(Long descriptorId, query, pfs)
      • REST layer - ContentServiceRest (Impl,Client)
        • getMapsets
          • /mapset/all/{terminology}/{version}
        • getMapset
          • /mapset/{terminologyId}/{terminology}/{version}
        • findMappingsForMapSet(Long mapSetId, query, pfs)
          • /mapset/{terminologyId}/{terminology}/{version}/mappings
        • findMappingsForXXX(Long xxxId, query, pfs)
          • /cui/{terminology}/{version}/{terminologyId}/mappings
          • /code/...
          • /dui/...
      • Integration tests
        • jpa
        • REST
          • basic test of client layer - e.g. make sure the calls to the server actually work and return something
      • Unit Tests
        • MapSetJpa, MappingJpa, MappingListJpa
      • Loaders
        • Then implement this for RRF loader
          • MRSAT
            • Handle in loadMrsat

              • Have a class-level   Map<String, MapSet> mapSetMap variable
              • When encountering a "mapping" attribute, create an entry in this map if it doesn't exist
                • use the CUI as the key
              • Extrac the mapset from the map, then set the corresponding field
              • At the end of loadMrsat, for each mapSet in the variable, call service.addMapSet(...)
            • MTH_MAPFROMEXHAUSTIVE => mapSet.fromExhaustive

            • MTH_MAPTOEXHAUSTIVE => mapSet.toExhaustive

            • MTH_MAPSETCOMPLEXITY => mapSet.complexity

            • MTH_MAPSETFROMCOMPLEXITY => mapSet.fromComplexity
            • MTH_MAPSETTOCOMPLEXITY => mapSet.toComplexity
            • MAPSETSID = mapSet.terminologyId

            • MAPSETNAME = mapSet.name
            • MAPSETVERSION = mapSet.mapVersion

            • MAPSETFROMVERSION = mapSet.mapVersion
            • MAPSETTOVERSION = mapSet.mapVersion
            MRMAP:
            • Add a loadMrmap method
              • use mapSetMap when processing mapping entries.
              • skip entries where the FROMTYPE or TOTYPE fields cannot be resolved to an IdType enum (IdType.valueOf(...) fails)
              • Look up the MapSetCui in mapSetMap, use this for mapping.setMapSet
            • MAPSETCUI - used to look up in mapSetMap
            • MAPSETSAB - mapSet.terminology
            • MAPSUBSETID = mapping.group
            • MAPRANK = mapping.rank
            • MAPID, MAPSID = mapping attribute, name="MAPID" value = "value of the MAPID field"
            • FROMID, FROMSID = mapping attribute
            • FROMEXPR = mapping.fromTerminologyId
            • FROMTYPE = mapping.fromIdType
            • FROMRULE, FROMRES = mapping attribute
            • REL,RELA = mapping.relationshipType, additionalRelationshipType
            • TOID,TOSID = mapping attribute
            • TOEXPR = mapping.toTerminologyId
            • TOTYPE = mapping.toIdType
            • TORULE,TORES = mapping attribute
            • MAPRULE = mapping.rule
            • MAPRES = mapping.advice
            • MAPTYPE = mapping.type
            • MAPATN,MAPATV = mapping attribute
            • CVF - n/a
        • Then implement this for RF2 loader (snapshot)
        • Then implement this for RF2 loader (delta)
      • Show mappings in UI.
    • Show atom-level subset information (e.g. language refset entires in SNOMED. may require a change to the graph resolver).

    ...