Synchronize concepts for a given code system
Inhaltsverzeichnis |
Description
You can synchronize concepts for a given code system with the method "ListCodeSystemConcepts" in the "Search" web service.
Therefore you have to specify a timestamp from your last synchronization. If it is your first, leave it empty. You have to save the current timestamp at every synchronization and save it to specify it at the next call.
SOAP
Web service: Search
Method: ListCodeSystemConcepts
Request
versionId: versionId from your code system you want to get concepts from
isMainClass: true, if you want to get only the root concepts (if code system is hierarchical)
lookForward: true, if you want to get the childs from the concepts, if available (if code system is hierarchical)
statusVisibilityDate: your last synchronization date
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sear="http://search.ws.terminologie.fhdo.de/"> <soapenv:Header/> <soapenv:Body> <sear:ListCodeSystemConcepts> <parameter> <codeSystem> <codeSystemVersions> <versionId>1</versionId> </codeSystemVersions> </codeSystem> <codeSystemEntity> <codeSystemEntityVersions> <statusVisibilityDate>2014-11-17T11:10:00+01:00</statusVisibilityDate> </codeSystemEntityVersions> </codeSystemEntity> <searchParameter> </searchParameter> <lookForward>false</lookForward> </parameter> </sear:ListCodeSystemConcepts> </soapenv:Body> </soapenv:Envelope>
Response
The following result show all concepts which are changed after "2014-11-17T11:10:00+01:00". You have to update the concepts in your database.
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> <S:Body> <ns2:ListCodeSystemConceptsResponse xmlns:ns2="http://search.ws.terminologie.fhdo.de/"> <return> <returnInfos> <count>1</count> <message>Konzepte erfolgreich gelesen, Anzahl: 1</message> <overallErrorCategory>INFO</overallErrorCategory> <status>OK</status> </returnInfos> <codeSystemEntity> <codeSystemEntityVersions> <codeSystemConcepts> <code>C</code> <codeSystemEntityVersionId>7</codeSystemEntityVersionId> <isPreferred>true</isPreferred> <term>Testgemeinschaft C</term> </codeSystemConcepts> <effectiveDate>2014-11-17T11:11:48+01:00</effectiveDate> <insertTimestamp>2014-11-17T11:11:48+01:00</insertTimestamp> <isLeaf>true</isLeaf> <statusDeactivated>0</statusDeactivated> <statusDeactivatedDate>2014-11-17T11:11:48+01:00</statusDeactivatedDate> <statusVisibility>1</statusVisibility> <statusVisibilityDate>2014-11-17T11:11:48+01:00</statusVisibilityDate> <statusWorkflow>0</statusWorkflow> <statusWorkflowDate>2014-11-17T11:11:48+01:00</statusWorkflowDate> <versionId>7</versionId> </codeSystemEntityVersions> <codeSystemVersionEntityMemberships> <isAxis>false</isAxis> <isMainClass>true</isMainClass> </codeSystemVersionEntityMemberships> <currentVersionId>7</currentVersionId> <id>7</id> </codeSystemEntity> </return> </ns2:ListCodeSystemConceptsResponse> </S:Body> </S:Envelope>
Java
WSDL: http://193.25.22.69:8080/TermServer/Search?wsdl
Sample has been created with netbeans. You have to add a web service reference with above WSDL to use the code below.
package termserverclientdemo; import de.fhdo.terminologie.ws.search.ListCodeSystemConceptsRequestType; import de.fhdo.terminologie.ws.search.ListCodeSystemConceptsResponse; import de.fhdo.terminologie.ws.search.Search; import de.fhdo.terminologie.ws.search.Search_Service; import java.net.URL; import java.util.Date; import java.util.GregorianCalendar; import javax.xml.datatype.DatatypeConfigurationException; import javax.xml.datatype.DatatypeFactory; import javax.xml.datatype.XMLGregorianCalendar; import javax.xml.namespace.QName; import types.termserver.fhdo.de.CodeSystemConcept; import types.termserver.fhdo.de.CodeSystemEntity; import types.termserver.fhdo.de.CodeSystemEntityVersion; import types.termserver.fhdo.de.CodeSystemVersion; /** * * @author Robert Mützner <robert.muetzner@fh-dortmund.de> */ public class SynchronizeConcepts { private java.util.Date lastSynch = new Date(); public void synchronizeConcepts() { boolean success = false; try { GregorianCalendar gc = (GregorianCalendar) GregorianCalendar.getInstance(); gc.set(GregorianCalendar.YEAR, 2014); gc.set(GregorianCalendar.MONTH, 10); gc.set(GregorianCalendar.DAY_OF_MONTH, 1); lastSynch = gc.getTime(); // create webservice reference and port Search_Service service = new Search_Service( new URL("http://193.25.22.69:8080/TermServer/Search?wsdl"), new QName("http://search.ws.terminologie.fhdo.de/", "Search")); Search port = service.getSearchPort(); // define parameter ListCodeSystemConceptsRequestType request = new ListCodeSystemConceptsRequestType(); CodeSystemVersion csvRequest = new CodeSystemVersion(); csvRequest.setVersionId(1l); // get code system with version id '1' request.setCodeSystem(new types.termserver.fhdo.de.CodeSystem()); request.getCodeSystem().getCodeSystemVersions().add(csvRequest); CodeSystemEntityVersion csev = new CodeSystemEntityVersion(); csev.setStatusVisibilityDate(dateToXMLGregorianCalendar(lastSynch)); // set last synch date request.setCodeSystemEntity(new CodeSystemEntity()); request.getCodeSystemEntity().getCodeSystemEntityVersions().add(csev); System.out.println("Date: " + dateToXMLGregorianCalendar(lastSynch)); // invoke method ListCodeSystemConceptsResponse.Return response = port.listCodeSystemConcepts(request); // handle response System.out.println("Response: " + response.getReturnInfos().getMessage()); if(response.getReturnInfos().getStatus() == de.fhdo.terminologie.ws.search.Status.OK) { System.out.println("Count: " + response.getReturnInfos().getCount()); for(CodeSystemEntity cse : response.getCodeSystemEntity()) { for(CodeSystemEntityVersion csv : cse.getCodeSystemEntityVersions()) { CodeSystemConcept csc = csv.getCodeSystemConcepts().get(0); System.out.println("VersionId: " + csv.getVersionId() + " " + csv.getStatusVisibilityDate().toString() + ", " + csc.getCode()+ " - " + csc.getTerm()); // update changed data in your database } } success = true; } else { // handle error message } } catch (Exception ex) { ex.printStackTrace(); } if(success) { lastSynch = new java.util.Date(); // TODO save current date for synchronization } } public static XMLGregorianCalendar dateToXMLGregorianCalendar(Date date) { GregorianCalendar gc = (GregorianCalendar) GregorianCalendar.getInstance(); gc.setTime(date); DatatypeFactory dataTypeFactory = null; try { dataTypeFactory = DatatypeFactory.newInstance(); } catch (DatatypeConfigurationException ex) { ex.printStackTrace(); } XMLGregorianCalendar value = dataTypeFactory.newXMLGregorianCalendar(gc); return value; } }