...
- DONE: serialization of concepts should include id, terminologyId, preferred name
- Applies to Description and Relationship
- Return 0 for Long if not set
- Return "" for String if not set
- DONE: Claml loader
- make sure transitive closure computation is working
DONE: BAC: REST APIs - fix @Consumes and @Produces
- Annotations are now at the class level, with TEXT_PLAIN overrides where parameters or return values are String.
- Domain model
- Comparator for natural sort order
- Also have unit tests for this
- Transitive closure computer - avoid cycles.
- Pass set of identifiers "seen" along the way - fail?
- PG: Finalize integration REST testing
- DONE: security service
- DONE: Metadata Service
- DONE: Content Service
- History service
DONE: PG: History service - handle other data structures
- Loaders
- DONE: Make sure snapshot and full create release info
- DONE: BAC: RF2 full - get this working
- DONE: DS: RF2 delta
- Handle other data structures (currently only 4) - need to add sample data (and headers) too
- Remember AttributeValue and AssociationReference need handling for both description and concept
- Need new ContentServiceJpa methods
- No need for "handle retracted changes"
- DONE: Scale to full RF2
- Monitor the number of copies of objects
- BAC: Manage memory usage and optimize commit
- Can delta loader scale to a full sized delta?
- Load full SNOMED 20140731
- then load delta SNOMED 20150131
- Can snapshot loader scale to a full sized snapshot with only a single commit?
- Consider making description/concept connections merely an id (lose referential integrity, but these could be added qa database)
- Can delta loader scale to a full sized delta?
DONE: change run.config to run.config.ts
DONE: BAC: Admin tools - all should use "server" flag except for QaDatabase and Create/Updatedb
DONE: BAC: QA Admin tool - fill in queries and reuse
Add queries for project and for release info
DONE: BAC: Separate "updatedb" into
admin project called "db"
pass hibernate.hbm2dd.auto as a parameter to the execution
call System.setProperty("hibernate.hbm2ddl.auto", hbm2ddlParameter).
THEN create the root service.
"createdb" profile
"updatedb" profile
- Remove the properties section from pom.xml
- Update documentation.
DONE: Mojo integration testing
Have a setup dev environment mojo
Have a teardown dev environment mojo (calls createdb at the end to clean up after itself, leavign an empty Db ready to go).
Testing
- BAC - Unit Testing
http://stackoverflow.com/questions/5141788/how-to-run-maven-from-java
DONE: Testing
- DS - Unit Testing
- model - add checks for @Field annotations (and analyze criteria)
- helpers
- handlers
- algorithms
- DS - Unit Testing
- DONE: ProjectService
- add project, etc.
- DONE: findXXX methods for refset membersfind all refset members (by refset id)
- DONE: get all members for a concept/description
- DONE: getInverseRelationships(Concept)
- ***Unit testing for these. Very basic user interface (as part of rest project).
- Header/Footer
- Point to swagger (change that index page to swagger.html)
- Security: login/logout
- Metadata:
- show terminologies and versions
- show all metadata for a selected terminology
- Content
- find concept
- get ancestors
- get children
- get descendants
FOR FUTURE SPRINTS
Fleshing out APIs
- Domain model
- Decide where to have "count" fields (and whether this should be maintained in DB, in Lucene, or computed by REST layer).
- e.g. concept.getChildCount(), concept.getSimpleRefSetMemberCount()
- Consider separating "relationship" and "inferred relationship" into separate tables/calls. This may help working with classifier easier.
- The "graph resolution handler" and the concept model and loaders would have to be updated too.
- Transitive closure computer - avoid cycles.
- Pass set of identifiers "seen" along the way - fail?
Handling effective time (new handler)
- Loaders should be allowed to set effective time
- release process should be allowed to set effective time
- want to be able to distinguish between published and unpublished things (perhaps a "published" flag is better)
Semantic search
- Support searching by hierarchy, by relationships, etc.
- Sparql end point? or expression language.
Project metadata service
- For Project (pull out of content service)
- for release info (pull out of history service)
PG Support running all admin tools through REST services
- Add additional rest calls (e.g. to action service or whatever)
- Add corresponding client calls.
- When adding a new project, have REST service set the "lastModifiedBy" to the user who authenticated.
Project-based authorization (e.g. only allow edits on concepts where a user is an author)
- This requires tracking the full concept scope with the project. (what if you add a concept?)
Application metadata service (project stuff?)
- Terminology Metadata service
- DONE Support classifier - root node (done), isa relationship (done), and role root.
- DONE stated/inferred char types should be metadata methods,
- Update TerminologyUtility accordingly to avoid hardcoded values
- new DL features for properties and data properties
- access to "RoleRelationship" objects
Security service - n/a
Content service methods for adding/removing inferred rels in batch.
- Separate read/write services of content service
- SNOMEDCT Editing Service
- HistoryService
- getRevisions (without boolean)
- getReleaseRevision(id, String release) - pick any one with matching release - get first one
- Configuration setting for synchronizing access to write services
- ContentService (and content change service) - have a "deep" delete on concept and description that deletes connected refset data too.
- REST layer
- Implement semantic search
- Implement everything across the board for Concept, Description, Language Refset, Relationship, and AssociationReference (e.g. reason for inactivation)
- Let the demo drive all use cases,
- READ only version of rest service
- Consider reorganizing snapshot loader to load concept-at-a-time.
Integration Testing
Mojo integration testing
Have a setup dev environment mojo
Have a teardown dev environment mojo (calls createdb at the end to clean up after itself, leavign an empty Db ready to go).
Identifier assignment
- Relationship and description and language refset member id assignment is tough because IDs don't exist yet when cascade is being used.
- Consider removing cascade and handling cascade manually based on graph resolution handler - e.g. however much of the graph is present is what gets udpated, then we can also compare against current states to see if its really chagned. If so, then we update last modified and save it (this addresses the next issue for now)
- then relationships can have ids based on hibernate ids instead of terminology ids..
- Recomputation of concept identifier and default preferred name should probably not require a "lastModifiedBy" or "lastModified" change.
...