...
To do this, Firstly you need to create GenericObjectnameStrategy interface if you wish to synchronize Objectname object
It should look more/less like this:
...
After that, the interface needs to be implemented by ObjectnameStrategy class that would contain concrete implementatons of method stubs.
A Strategy Util class, like ObjectNameStrategyUtil should be created next to retrieve the implemented strategy in the following way:
Code Block |
---|
package org.openmrs.module.fhir.api.strategies.objectname; import org.openmrs.api.context.Context; import org.openmrs.module.fhir.api.util.FHIRUtils; public class ObjectNameStrategyUtil { public static GenericObjectNameStrategy getObjectNameStrategy() { String strategy = FHIRUtils.getObjectNameStrategy(); return strategy == null ? new ObjectNameStrategy() : Context.getRegisteredComponent(strategy, GenericObjectNameStrategy.class); } } |
...
Then, ObjectNameServiceImpl class needs to be created to call ObjectNameStrategyUtil class:
Code Block |
---|
package org.openmrs.module.fhir.api.impl; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hl7.fhir.dstu3.model.ObjectName; import org.openmrs.api.impl.BaseOpenmrsService; import org.openmrs.module.fhir.api.ObjectNameService; import org.openmrs.module.fhir.api.db.FHIRDAO; import org.openmrs.module.fhir.api.strategies.objectname.ObjectNameStrategyUtil; public class ObjectNameServiceImpl extends BaseOpenmrsService implements ObjectNameService { protected final Log log = LogFactory.getLog(this.getClass()); private FHIRDAO dao; /** * @return the dao */ public FHIRDAO getDao() { return dao; } /** * @param dao the dao to set */ public void setDao(FHIRDAO dao) { this.dao = dao; } @Override public ObjectName getObjectName(String uuid) { return ObjectNameStrageryUtil.getObjectNameStrategy().getObjectName(uuid); } @Override public void deleteObjectName(String uuid) { ObjectNameStrageryUtil.getObjectNameStrategy().deleteObjectName(uuid); } @Override public ObjectName updateObjectName(String uuid, ObjectName objectName) { return ObjectNameStrategyUtil.getObjectName().updateObjectName(uuid, objectName); } @Override public ObjectName createObjectName(ObjectName objectName) { return ObjectNameStrategyUtil.getObjectNameStrategy().createObjectName(ObjectName); } } |
Which It should implement an ObjectNameService interface:
Code Block |
---|
package org.openmrs.module.fhir.api;
import org.hl7.fhir.dstu3.model.ObjectName;
import org.openmrs.api.OpenmrsService;
import org.springframework.transaction.annotation.Transactional;
@Transactional
public interface ObjectNameService extends OpenmrsService {
/**
* Get object by id
*
* @param uuid The uuid of object
* @return ObjectName fhir resource
*/
ObjectName getObjectName(String uuid);
/**
* Delete object by id
*
* @param uuid The uuid of object
*/
void deleteObjectName(String uuid);
/**
* Update object
*
* @param uuid The uuid of object
* @param objectName representation of object fhir resource
*/
ObjectName updateObjectName(String uuid, ObjectName objectName);
/**
* Create object
*
* @param objectName the object to create
*/
ObjectName createObjectName(ObjectName objectName);
}
|
Also, a FHIRObjectNameResource needs to be created that is going to use the created Service:
Code Block |
---|
package org.openmrs.module.fhir.resources; import org.hl7.fhir.dstu3.model.IdType; import org.hl7.fhir.dstu3.model.ObjectName; import org.openmrs.api.context.Context; import org.openmrs.module.fhir.api.ObjectNameService; public class FHIRObjectNameResource extends Resource { public ObjectName getByUniqueId(IdType id) { ObjectNameService objectNameService = Context.getService(ObjectNameService.class); return objectNameService.getObjectName(id.getIdPart()); } public void deleteObjectName(IdType id) { ObjectNameService ObjectNameService = Context.getService(ObjectNameService.class); objectNameService.deleteObjectName(id.getIdPart()); } public ObjectName updateObjectName(String id, ObjectName objectName) { return Context.getService(ObjectNameService.class).updateObjectName(id, objectName); } public ObjectName createObjectName(ObjectName objectName) { return Context.getService(ObjectNameService.class).createObjectName(objectName); } } |
Last class that needs to be created is RestfulObjectNameProvider:
Code Block |
---|
package org.openmrs.module.fhir.providers;
import ca.uhn.fhir.rest.annotation.Create;
import ca.uhn.fhir.rest.annotation.Delete;
import ca.uhn.fhir.rest.annotation.IdParam;
import ca.uhn.fhir.rest.annotation.Read;
import ca.uhn.fhir.rest.annotation.ResourceParam;
import ca.uhn.fhir.rest.annotation.Update;
import ca.uhn.fhir.rest.api.MethodOutcome;
import ca.uhn.fhir.rest.server.IResourceProvider;
import org.hl7.fhir.dstu3.model.IdType;
import org.hl7.fhir.dstu3.model.RelatedPerson;
import org.hl7.fhir.instance.model.api.IBaseResource;
import org.openmrs.module.fhir.resources.FHIRRelatedPersonResource;
import org.openmrs.module.fhir.util.MethodOutcomeBuilder;
public class RestfulObjectNameProvider implements IResourceProvider {
private FHIRObjectNameResource objectNameResource;
public RestfulObjectNameProvider() {
objectNameResource = new FHIRObjectNameResource();
}
@Override
public Class<? extends IBaseResource> getResourceType() {
return ObjectName.class;
}
/**
* Get object by unique id
*
* @param theId object containing the id
*/
@Read
public ObjectName getResourceById(@IdParam IdType theId) {
return objectNameResource.getByUniqueId(theId);
}
/**
* Delete object by unique id
*
* @param theId object containing the id
*/
@Delete
public void deleteObjectName(@IdParam IdType theId) {
objectNameResource.deleteObjectName(theId);
}
/**
* Update object by unique id
*
* @param theId object containing the id
*/
@Update
public MethodOutcome updateObjectName(@ResourceParam ObjectName objectName, @IdParam IdType theId) {
return MethodOutcomeBuilder.buildUpdate(objectName);
}
/**
* Create object
*
* @param objectName fhir objectname object
*/
@Create
public MethodOutcome createObjectName(@ResourceParam ObjectName objectName) {
return MethodOutcomeBuilder.buildCreate(objectNameResource.createObjectName(objectName));
}
}
|
The created provided must be added in FHIRRESTServer class in the initialize method to resourceProviders like this:
Code Block |
---|
resourceProviders.add(new RestfulRelatedPersonProvider());
|
When all these classes are created in the FHIR code, the ObjectName object is prepared to be synchronized by FHIR