src/main/java/ch/bfh/ti/i4mi/mag/mhd/iti67/Iti67RequestConverter.java
/**
	  * convert ITI-67 request to ITI-18 request
	  * @param searchParameter
	  * @return
	  */
convert ITI-67 request to ITI-18 request
@param searchParameter
@return
convert ITI - 67 request to ITI - 18 request @param searchParameter @return
public QueryRegistry searchParameterIti67ToFindDocumentsQuery(@Body Iti67SearchParameters searchParameter) {
            boolean getLeafClass = true;
            Query searchQuery = null;
            if (searchParameter.get_id() != null || searchParameter.getIdentifier() != null) {
            	GetDocumentsQuery query = new GetDocumentsQuery();
            	if (searchParameter.getIdentifier() != null) {
	   	        	 String val = searchParameter.getIdentifier().getValue();
	   	        	 if (val.startsWith("urn:oid:")) {
	   	        		 query.setUniqueIds(Collections.singletonList(val.substring("urn:oid:".length())));
	   	        	 } else if (val.startsWith("urn:uuid:")) {
	   	        		 query.setUuids(Collections.singletonList(val.substring("urn:uuid:".length())));
	   	        	 }
           	    } else {
           		     query.setUuids(Collections.singletonList(searchParameter.get_id().getValue()));
           	    }            	            	
            	searchQuery = query;
            } else {
            	FindDocumentsQuery query;
	            TokenOrListParam related = searchParameter.getRelated();
	            if (related != null) {
	            	FindDocumentsByReferenceIdQuery referenceIdQuery = new FindDocumentsByReferenceIdQuery();;
	            	QueryList<ReferenceId> outerReferences = new QueryList<ReferenceId>();
	            	List<ReferenceId> references = new ArrayList<ReferenceId>();
	            	for (TokenParam token : related.getValuesAsQueryTokens()) {
	            		references.add(new ReferenceId(token.getValue(), null, getScheme(token.getSystem())));
	            	}
	            	outerReferences.getOuterList().add(references);
	            	referenceIdQuery.setTypedReferenceIds(outerReferences);
	            	query = referenceIdQuery;            	
	            } else query = new FindDocumentsQuery();          
	            TokenOrListParam status = searchParameter.getStatus();
	            if (status != null) {
		            List<AvailabilityStatus> availabilites = new ArrayList<AvailabilityStatus>();
		            for (TokenParam statusToken : status.getValuesAsQueryTokens()) {
		            	String tokenValue = statusToken.getValue();
		            	if (tokenValue.equals("current")) availabilites.add(AvailabilityStatus.APPROVED);
		            	else if (tokenValue.equals("superseded")) availabilites.add(AvailabilityStatus.DEPRECATED);
		            }            
		            query.setStatus(availabilites);
	            }
	            TokenParam tokenIdentifier = searchParameter.getPatientIdentifier();
	            if (tokenIdentifier != null) {
	                String system = getScheme(tokenIdentifier.getSystem());   
	                if (system==null) throw new InvalidRequestException("Missing OID for patient");
	                query.setPatientId(new Identifiable(tokenIdentifier.getValue(), new AssigningAuthority(system)));
	            }
	            ReferenceParam patientRef =  searchParameter.getPatientReference();
	            if (patientRef != null) {
	           	 Identifiable id = transformReference(patientRef.getValue());
	           	 query.setPatientId(id);
	            }
	            DateRangeParam dateRange = searchParameter.getDate();
	            if (dateRange != null) {
		            DateParam creationTimeFrom = dateRange.getLowerBound();
		            DateParam creationTimeTo = dateRange.getUpperBound();
		            query.getCreationTime().setFrom(timestampFromDateParam(creationTimeFrom));
		            query.getCreationTime().setTo(timestampFromDateParam(creationTimeTo));
	            }
	            DateRangeParam periodRange = searchParameter.getPeriod();
	            if (periodRange != null) {
	            	DateParam periodFrom = periodRange.getLowerBound();
	            	DateParam periodTo = periodRange.getUpperBound();
	            	query.getServiceStopTime().setFrom(timestampFromDateParam(periodFrom));
	            	query.getServiceStartTime().setTo(timestampFromDateParam(periodTo));
	            }
	            TokenOrListParam categories = searchParameter.getCategory();
	            query.setClassCodes(codesFromTokens(categories));
	            TokenOrListParam types = searchParameter.getType();
	            query.setTypeCodes(codesFromTokens(types));
	            TokenOrListParam settings = searchParameter.getSetting();
	            query.setPracticeSettingCodes(codesFromTokens(settings));
	            TokenOrListParam facilities = searchParameter.getFacility();
	            query.setHealthcareFacilityTypeCodes(codesFromTokens(facilities));
	            TokenOrListParam events = searchParameter.getEvent();
	            if (events != null) {
		            QueryList<Code> eventCodeList = new QueryList<Code>();
		            eventCodeList.getOuterList().add(codesFromTokens(events));
		            query.setEventCodes(eventCodeList);
	            }
	            TokenOrListParam securityLabels = searchParameter.getSecurityLabel();
	            if (securityLabels != null) {
	            	QueryList<Code> confidentialityCodes = new QueryList<Code>();
	            	confidentialityCodes.getOuterList().add(codesFromTokens(securityLabels));
	            	query.setConfidentialityCodes(confidentialityCodes);
	            }
	            TokenOrListParam formats = searchParameter.getFormat();
	            query.setFormatCodes(codesFromTokens(formats));
	            StringParam authorGivenName = searchParameter.getAuthorGivenName();
	            StringParam authorFamilyName = searchParameter.getAuthorFamilyName();
	            if (authorGivenName != null || authorFamilyName != null) {
	            	Person person = new Person();
	            	XcnName name = new XcnName();
					if (authorFamilyName != null) name.setFamilyName(authorFamilyName.getValue());
					if (authorGivenName != null)  name.setGivenName(authorGivenName.getValue());
	            	person.setName(name);
		            List<Person> authorPersons = Collections.singletonList(person);
		            query.setTypedAuthorPersons(authorPersons);
	            }
	            searchQuery = query;
            }
            final QueryRegistry queryRegistry = new QueryRegistry(searchQuery);
            queryRegistry.setReturnType((getLeafClass) ? QueryReturnType.LEAF_CLASS : QueryReturnType.OBJECT_REF);
            return queryRegistry;
    }
public QueryRegistry searchParameterIti67ToFindDocumentsQuery ( @ Body Iti67SearchParameters searchParameter ) { boolean getLeafClass = true ; Query searchQuery = null ; if ( searchParameter . get_id ( ) != null || searchParameter . getIdentifier ( ) != null ) { GetDocumentsQuery query = new GetDocumentsQuery ( ) ; if ( searchParameter . getIdentifier ( ) != null ) { String val = searchParameter . getIdentifier ( ) . getValue ( ) ; if ( val . startsWith ( "urn:oid:" ) ) { query . setUniqueIds ( Collections . singletonList ( val . substring ( "urn:oid:" . length ( ) ) ) ) ; } else if ( val . startsWith ( "urn:uuid:" ) ) { query . setUuids ( Collections . singletonList ( val . substring ( "urn:uuid:" . length ( ) ) ) ) ; } } else { query . setUuids ( Collections . singletonList ( searchParameter . get_id ( ) . getValue ( ) ) ) ; } searchQuery = query ; } else { FindDocumentsQuery query ; TokenOrListParam related = searchParameter . getRelated ( ) ; if ( related != null ) { FindDocumentsByReferenceIdQuery referenceIdQuery = new FindDocumentsByReferenceIdQuery ( ) ; ; QueryList < ReferenceId > outerReferences = new QueryList < ReferenceId > ( ) ; List < ReferenceId > references = new ArrayList < ReferenceId > ( ) ; for ( TokenParam token : related . getValuesAsQueryTokens ( ) ) { references . add ( new ReferenceId ( token . getValue ( ) , null , getScheme ( token . getSystem ( ) ) ) ) ; } outerReferences . getOuterList ( ) . add ( references ) ; referenceIdQuery . setTypedReferenceIds ( outerReferences ) ; query = referenceIdQuery ; } else query = new FindDocumentsQuery ( ) ; TokenOrListParam status = searchParameter . getStatus ( ) ; if ( status != null ) { List < AvailabilityStatus > availabilites = new ArrayList < AvailabilityStatus > ( ) ; for ( TokenParam statusToken : status . getValuesAsQueryTokens ( ) ) { String tokenValue = statusToken . getValue ( ) ; if ( tokenValue . equals ( "current" ) ) availabilites . add ( AvailabilityStatus . APPROVED ) ; else if ( tokenValue . equals ( "superseded" ) ) availabilites . add ( AvailabilityStatus . DEPRECATED ) ; } query . setStatus ( availabilites ) ; } TokenParam tokenIdentifier = searchParameter . getPatientIdentifier ( ) ; if ( tokenIdentifier != null ) { String system = getScheme ( tokenIdentifier . getSystem ( ) ) ; if ( system == null ) throw new InvalidRequestException ( "Missing OID for patient" ) ; query . setPatientId ( new Identifiable ( tokenIdentifier . getValue ( ) , new AssigningAuthority ( system ) ) ) ; } ReferenceParam patientRef = searchParameter . getPatientReference ( ) ; if ( patientRef != null ) { Identifiable id = transformReference ( patientRef . getValue ( ) ) ; query . setPatientId ( id ) ; } DateRangeParam dateRange = searchParameter . getDate ( ) ; if ( dateRange != null ) { DateParam creationTimeFrom = dateRange . getLowerBound ( ) ; DateParam creationTimeTo = dateRange . getUpperBound ( ) ; query . getCreationTime ( ) . setFrom ( timestampFromDateParam ( creationTimeFrom ) ) ; query . getCreationTime ( ) . setTo ( timestampFromDateParam ( creationTimeTo ) ) ; } DateRangeParam periodRange = searchParameter . getPeriod ( ) ; if ( periodRange != null ) { DateParam periodFrom = periodRange . getLowerBound ( ) ; DateParam periodTo = periodRange . getUpperBound ( ) ; query . getServiceStopTime ( ) . setFrom ( timestampFromDateParam ( periodFrom ) ) ; query . getServiceStartTime ( ) . setTo ( timestampFromDateParam ( periodTo ) ) ; } TokenOrListParam categories = searchParameter . getCategory ( ) ; query . setClassCodes ( codesFromTokens ( categories ) ) ; TokenOrListParam types = searchParameter . getType ( ) ; query . setTypeCodes ( codesFromTokens ( types ) ) ; TokenOrListParam settings = searchParameter . getSetting ( ) ; query . setPracticeSettingCodes ( codesFromTokens ( settings ) ) ; TokenOrListParam facilities = searchParameter . getFacility ( ) ; query . setHealthcareFacilityTypeCodes ( codesFromTokens ( facilities ) ) ; TokenOrListParam events = searchParameter . getEvent ( ) ; if ( events != null ) { QueryList < Code > eventCodeList = new QueryList < Code > ( ) ; eventCodeList . getOuterList ( ) . add ( codesFromTokens ( events ) ) ; query . setEventCodes ( eventCodeList ) ; } TokenOrListParam securityLabels = searchParameter . getSecurityLabel ( ) ; if ( securityLabels != null ) { QueryList < Code > confidentialityCodes = new QueryList < Code > ( ) ; confidentialityCodes . getOuterList ( ) . add ( codesFromTokens ( securityLabels ) ) ; query . setConfidentialityCodes ( confidentialityCodes ) ; } TokenOrListParam formats = searchParameter . getFormat ( ) ; query . setFormatCodes ( codesFromTokens ( formats ) ) ; StringParam authorGivenName = searchParameter . getAuthorGivenName ( ) ; StringParam authorFamilyName = searchParameter . getAuthorFamilyName ( ) ; if ( authorGivenName != null || authorFamilyName != null ) { Person person = new Person ( ) ; XcnName name = new XcnName ( ) ; if ( authorFamilyName != null ) name . setFamilyName ( authorFamilyName . getValue ( ) ) ; if ( authorGivenName != null ) name . setGivenName ( authorGivenName . getValue ( ) ) ; person . setName ( name ) ; List < Person > authorPersons = Collections . singletonList ( person ) ; query . setTypedAuthorPersons ( authorPersons ) ; } searchQuery = query ; } final QueryRegistry queryRegistry = new QueryRegistry ( searchQuery ) ; queryRegistry . setReturnType ( ( getLeafClass ) ? QueryReturnType . LEAF_CLASS : QueryReturnType . OBJECT_REF ) ; return queryRegistry ; }
convert ITI-67 request to ITI-18 request
 @param searchParameter
 @return
convert ITI - 67 request to ITI - 18 request @param searchParameter @return
//  TODO   related Note 4                  -->  $XDSDocumentEntryReferenceIdList //            query.setMetadataLevel(metadataLevel); // status  -->  $XDSDocumentEntryStatus // patient or patient.identifier  -->  $XDSDocumentEntryPatientId // date Note 1 Note 5              -->  $DSDocumentEntryCreationTimeFrom // date Note 2 Note 5              -->  $XDSDocumentEntryCreationTimeTo // period Note 1                   -->  $XDSDocumentEntryServiceStartTimeFrom // period Note 2                   -->  $XDSDocumentEntryServiceStartTimeTo // period Note 1                   -->  $XDSDocumentEntryServiceStopTimeFrom // period Note 2                   -->  $XDSDocumentEntryServiceStopTimeTo            //  category                        -->  $XDSDocumentEntryClassCode //  type                            -->  $XDSDocumentEntryTypeCode //  setting                         -->  $XDSDocumentEntryPracticeSettingCode // facility                        -->  $XDSDocumentEntryHealthcareFacilityTypeCode // event                           -->  $XDSDocumentEntryEventCodeList //  security-label                  -->  $XDSDocumentEntryConfidentialityCode //  format                          -->  $XDSDocumentEntryFormatCode //  TODO   author.given / author.family    -->  $XDSDocumentEntryAuthorPerson //String author = (authorGivenName != null ? authorGivenName.getValue() : "%")+" "+(authorFamilyName != null ? authorFamilyName.getValue() : "%");