/
SPRINT 2 - concludes October 30

SPRINT 2 - concludes October 30

Overview

First dev push to get basic internal infrastructure externalized and support some basic new infrastructure stuff.

Fleshing out Infrastructure

Next, attribute value and association reference refset entries can be associated with either descriptions or concepts

  • Split AttributeValueRefSetMember and AssociationReferenceRefSetMember into two kinds
    • AttributeValueDescriptionRefSetMember - these are attributes on descriptions
    • AssociationReferenceDescriptionRefSetMember - this is description history info
      • the target componnet is always still a concept, this only changes the referenced component
    • AttributeValueConceptRefSetMember - these are attributes on concepts
    • AssociationReferenceConceptRefSetMember - this is concept history info
      • the target componnet is always still a concept, this only changes the referenced component

Make sure all refset patterns are covered.  In particular we need to add support for "association reference" refset entries as these are currently not modeled.

  • See everywhere that AttributeValueRefSetMember is used and model it also for AssociationReferenceRefSetMember (it's considered a concept refset)

Core improvements to model

  • equals/hashcode - ignore effectiveTime, id, defaultPreferredName, label and sub-objects (like concept-> description), but parent objects should be included
  • copy constructors

Fleshing out APIs

 

Step 1

ContentServiceJpa defines many more methods then the rest API.  We want to implement these as REST services.  Start with the various getXXX() methods and implement across the stack.

  • Add to ContentServiceRest
  • Add to ContentServiceRestImpl (make sure to update the swagger @Api annotations)
  • Add to ContentClientRest
  • Add to ContentServiceTest (the integration test)

Step 2

Once ID assignment issues are worked out, repeat the procedure above, but for "add", "remove", and "update methods

Step 3

Implement MetadataClientRest and MetadataClientTest.

ID Assignment

Choose an ID strategy

  • Application Managed - no assigning of terminologyIds, thus if they are null, it throws an explicit exception
    • No special treatment at release time
  • SCTID-UUID Identity Managed - each data type is assigned a UUID based on its "identity" fields.
    • Concepts are a special case and assigned a UUID based on parent concept and fsn?
    • Otherwise "equivalence" is determined later by the classifier.
    • whenever a concept changes it should be subject to recomputation of its terminology ID
      • assigned SCTIDs do not change
    • At release time, UUIDs get converted to SCTID based on "max" prior identifiers and the verhoff checksum algorithm.
  • No other default implementations

UTS Security handler

see below -> make it but then put the code directly in the project.

See https://uts.nlm.nih.gov///help/license/validateumlsuserhelp.html

      <plugin>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-codegen-plugin</artifactId>
        <dependencies>
          <dependency>
            <groupId>xerces</groupId>
            <artifactId>xercesImpl</artifactId>
            <version>2.8.1</version>
          </dependency>
        </dependencies>
        <executions>
          <execution>
            <id>generate-ws-security-client</id>
            <configuration>
              <sourceRoot>${project.build.directory}/generated-sources</sourceRoot>
              <wsdlOptions>
                <wsdlOption>
                  <wsdl>https://uts-ws.nlm.nih.gov/services/nwsSecurity?wsdl</wsdl>
                </wsdlOption>
              </wsdlOptions>
            </configuration>
            <goals>
              <goal>wsdl2java</goal>
            </goals>
          </execution>
        </executions>
      </plugin>


OR just use "wsimport"


 Service bus

hook on each "change" to integrate with workflow.

Incremental maintenance of transitive closure

  • New relationship.

Release Processing

Release service? - assign ids and effective time where effectiveTime is null 

Release admin tool

ReleaseHistory object?

Full and Extension/Edition loaders

  • Also loaders need to be able to flexibly use the "terminology" and "version" settings - pass as parameters so that an 
  • consider what's involved in loading core + a number of extensions and labelling them correctly (e.g. terminology)  - I think using Module for this is ideal.
  • Support an "exxtension" loader that is basically a delta loader but tuned for loading extensions